2013-06-21 2 views
18

Я использую Entity Framework и Linq для Entitites.Как отладить выражение Linq Lambda?

Я хотел бы знать, есть ли какой-либо способ в Visual Studio 2012 для отладки, шаг за шагом этот код. В момент установки точки останова курсор перемещается по нему, но не входит внутрь.

Мне больше всего интересно увидеть значение x.e ... не sql generate, например.

Примечания: Другие бесплатные сборы или плагины Visual Studio являются тоже хорошо

  IEnumerable<EventPushNotification> eventToPushCollage = eventsForEvaluation 
        .GroupJoin(eventCustomRepository.FindAllPushedEvents(), 
         e => e.Id, 
         p => p.PushedEventId, 
         (e, p) => new { e, p }) 
        .Where(x => x.e.DateTimeStart > currentDateTime && 
         currentDateTime >= x.e.DateTimeStart.AddMinutes(defaultReminders) &&  // Data from default reminder for collage event in web.config 
         x.p.Count() == 0)           // Check if the Event has not being already pushed 
        .Select(y => new EventPushNotification 
        { 
         Id = y.e.Id, 
         EventTitle = y.e.EventTitle, 
         DateTimeStart = y.e.DateTimeStart, 
         DateTimeEnd = y.e.DateTimeEnd, 
         Location = y.e.Location, 
         Description = y.e.Description, 
         DeviceToken = y.e.DeviceToken 
        }); 
+5

Вы можете щелкнуть правой кнопкой мыши по одной из лямбда и выбрать «Точка останова -> Вставить точку останова». Это выделит только лямбда. –

+1

http://blogs.msdn.com/b/visualstudioalm/archive/2014/11/12/support-for-debugging-lambda-expressions-with-visual-studio-2015.aspx VS-2015 будет поддерживать это , :) – pedram

ответ

6

can't Отладить выражение Lambda, если вы используете поставщик Linq2Entities.

Но вы можете take a look, на каком SQL он переводится. Кроме того, если вы готовы страдать удар по производительности - вы можете загрузить все это в Linq к obejcts - и сделать Step by step

+1

Я не собираюсь ниспровергать, но посмотрите ниже на http://stackoverflow.com/a/22518808/2754848 и найдите решение, которое работает очень хорошо. – Daved

+0

@Daved hmmm Leniel был бы прав * если * OP использовал LinqToObjects - но это не случай OP. Лэмбда OP - это LinqToEntities - и один * cant * отлаживает те, которые, как полагает Лейль. Я опроверг свой ответ –

+1

Достаточно честный. Я прочитал эту часть. Благодарим за редактирование вашего решения. Linq to Obj смотрите ниже. Linq to Entity смотрите выше :) – Daved

4

Вы можете добавить точки останова на любой ваш собственный код.

Итак, поставьте курсор на «x.e» и нажмите F9.

1

Нет никакого способа увидеть значения x или e переменных, поскольку linq to orm не выполняется, он преобразуется/интерпретируется для генерации SQL-запроса.

66

Убедитесь, что вы читали официальный MSDN документ по этому вопросу:

Debugging LINQ

и проголосуйте за это предложение на пользователей голосовой странице Visual Studio,:

Debug Lambda expressions

Allon Guralnek комментирует 18 марта 2014 12:37 вечер о способе установки точки останова только с клавиатурой:

@Anonymous: Вы можете сделать это сегодня, установив точку останова внутри лямбды, что позволяет вам проверять каждое значение, которое приходит, и из лямбда. Насколько я знаю, вы не можете установить точку останова внутри лямбдой с помощью мыши, вы должны использовать клавиатуру. Поместите курсор внутри тела лямбда (например, на первый токен или что-нибудь после => и пробел, который следует), затем нажмите F9 (или любую комбинацию клавиш, которую вы используете для размещения точки останова). Только внутри инструкция лямбда станет красной, и отладчик будет разбит там на каждый элемент, на который рассчитывается лямбда (так что для массива из 100 элементов с использованием .Where() приведет к тому, что точка останова будет достигать 100 раз).

Вот это в действии в моем текущем Visual Studio 2013:

enter image description here

Как вы можете видеть, что это работает очень хорошо и позволяет увидеть значение данного свойства тестируется. Это наверняка удивительный инструмент/спасатель! :)

+1

Прохладный, ваш совет просто помог мне отладить через различные лямбды выражения, которые были для меня полностью черным ящиком. Спасибо –

+6

Это хорошо выглядит в редакторе (VS2013) (только лямбда красная), но при отладке staritng весь оператор становится красным для меня, а отладчик разбивается на внешний оператор. :(Идеи? – Macke

+2

Это не ответ? – JsonStatham

3

Для будущих читателей это теперь включено в Visual Studio. Начиная с Visual Studio 2015 Preview, вы можете отлаживать выражение лямбда во время отладки. Все окна отладки, включая Watch, QuickWatch и Immediate, поддерживают оценку выражения лямбда. Вы можете узнать больше об этом here.

1

Вы можете отлаживать лямбда-выражений в Visual Studio 2015.

http://blogs.msdn.com/b/visualstudioalm/archive/2014/11/12/support-for-debugging-lambda-expressions-with-visual-studio-2015.aspx

+0

У меня есть версия для VS 2015, сделана эта настройка, но до сих пор не работает – Adeem

+0

@Adeem Никто не сказал ничего о настройке. я использую VS Enterprise 2015, так как он был выпущен, и я не могу вспомнить время, когда лямбда-отладка не сработала. –

0

Я должен был 'Enable Just My Code' в Tools/Options/Debugging. Чтобы увидеть разные результаты между лямбда-методами, я поставил .ToList() между ними.

+0

У меня есть версия VS 2015, сделанная с этой настройкой, но не работающая – Adeem

Смежные вопросы