Подтвердить что ты не робот

Как смотреть выражения Linq в VS 2015

Я пытаюсь отладить выражение Linq в Visual Studio 2015. Когда я добавляю его в окно просмотра, я получаю следующую ошибку в столбце Value.

поле .DomainValues.Where(d = > d.Active) error CS1061: "Список" не содержит определения "Где" и нет метод расширения 'Where', принимающий первый аргумент типа "Список" можно найти (вы не указали директиву использования или ссылку на сборку?)

Когда я пытаюсь выполнить в окне Immediate, я получаю ту же ошибку.

ошибка CS1061: "Список" не содержит определения для 'Where' и не метод расширения 'Where', принимающий первый аргумент тип "Список" можно найти (если вы не используете директива или ссылка на сборку?)

Я думал, что поддержка была добавлена ​​для этого в Visual STudio 2015 на основе этой статьи - http://blogs.msdn.com/b/visualstudioalm/archive/2014/11/12/support-for-debugging-lambda-expressions-with-visual-studio-2015.aspx

Я нашел эту статью, которая описывает некоторые ограничения, но ни одно из них не относится к моему приложению WPF x86. http://dotnetdeewane.blogspot.com/2015/03/support-for-debugging-lambda.html

  • У меня есть приложение x86.Net 4.5 WPF.
  • В моем окне вывода я вижу, что загружен System.Core.

Loaded 'C:\WINDOWS\Microsoft.Net\сборка\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll'

  • Мой метод статический, а не async. У меня есть оператор System.Linq в верхней части моего класса.

    using Infragistics.Windows.Editors;
    using Microsoft.Practices.ServiceLocation;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows;
    
    public static ValueEditor SelectEditor(ColumnConfig config, TableInfo info, object value = null)    
    {    
        //do some stuff    
        field.FilteredDomainValues = field.DomainValues.Where(d => d.Active).ToList();    
        //do some other stuff    
    }
    
  • Я не использую динамические типы

У меня также есть Visual Studio 2012 и Visual Studio 2013.

Я использую Resharper.

Что-нибудь еще, что я могу проверить в параметрах VS?

4b9b3361

Ответ 1

Ключом является обеспечение загрузки System.Core.dll. Один простой способ сделать это - иметь следующее в верхней части файла, от которого вы отлаживаете:

#if DEBUG
using System.Diagnostics;
#endif

Ответ 2

У меня была та же проблема, и я исправил ее, сделав вызов Enumerable.Range в коде, прежде чем проверять выражение лямбда в окне просмотра

Ответ 3

Я использую Debug > Windows > Immediate Window. Он позволяет мне вводить выражения, которые я использую для отладки и экспериментирования. Он поставляется с полной поддержкой Intellisense.

field.DomainValues
field.DomainValues.Where(d => d.Active)
field.DomainValues.Count(d => d.Active)
field.DomainValues.Where(d => d.Active).First()

Ответ 4

Согласно MSDN:

ПРИМЕЧАНИЕ. Лямбда-выражения, которые требуют запуска собственных функций (например, LINQ-to-SQL), не поддерживаются.

Я вижу в вашем примере, что ваши параметры метода имеют тип TableInfo, ColumnConfig, который звучит довольно SQL, связанный со мной. По какой-либо причине поле .DomainValues ​​указывает на БД и использует LINQ-To-SQL для решения?