Як налагодити Linq Lambda Expression?

Я використовую Entity Framework і Linq для Entitites.

Я хотів би знати, чи є в Visual Studio 2012 можливість відлагоджувати цей код, крок за кроком. У момент розміщення точки розриву, курсор переходить його, але не вступає.

Мені більше цікаво бачити значення x.e ... не sql, створений, наприклад.

Примітки: Я добре з використанням інших інструментів або плагінів Visual Studio.

          IEnumerable 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
                     });
19
Ви можете клацнути правою кнопкою миші на одному з лямбд і вибрати "Точка зупину -> Вставити точку зупинки". Це виділить лише лямбда.
додано Автор Adam Houldsworth, джерело
blogs.msdn.com/b/visualstudioalm/archive/2014/11/12/… VS-2015 підтримає це. :)
додано Автор pedram, джерело

7 Відповіді

Переконайтеся, що ви прочитали офіційний документ MSDN з цього питання:

Налагодження LINQ

і проголосуйте за цю пропозицію на сторінці голосу користувача Visual Studio:

Виправлення помилок у лямбда-виразах

Allon Guralnek comments on March 18, 2014 12:37 PM about a way of setting a breakpoint with the keyboard only:

@Anonymous: You can do this today by setting a breakpoint inside the lambda, thereby enabling you to inspect each value that comes in and out of the lambda. As far as I know, you can't set a breakpoint inside a lambda using the mouse, you must use the keyboard. Put the cursor inside the lambda body (e.g. on the first token, or anything after the => and the whitespace that follows) then press F9 (or whatever keyboard shortcut you use to place a breakpoint). Only the inside of the lambda statement will turn red, and the debugger will break there for each item the lambda is evaluated against (so for an array of 100 items, using .Where() will cause the breakpoint to hit 100 times).

Ось у дію в моєму поточному Visual Studio 2013:

enter image description here

Як ви можете бачити, він працює досить добре і дозволяє нам бачити значення даної властивості, що тестується. Це, безумовно, дивовижний інструмент/заставка! :)

70
додано
Це також не працює в Visual Studio 2017
додано Автор James Wierzba, джерело
Хіба це не відповідь?
додано Автор JsonStatham, джерело
Це добре виглядає в редакторі (VS2013) (тільки лямбда - червона), але при зіткненні налагодження, ціле вираз стає червоним для мене, а відладчик розбивається на зовнішній оператор. :( Ідеї?
додано Автор Macke, джерело
Це не працює в Visual Studio 2015?
додано Автор Rosdi Kasim, джерело
Прохолодний, ваш рада тільки що допомогла мені налагоджувати різні лямбда-вирази, які були для мене абсолютно чорним ящиком. Дякую
додано Автор Robert Dinaro, джерело

не може налагоджувати Lambda-вираження, якщо ви використовуєте постачальника Linq до Entities.

But you can take a look at what SQL it translate into. Also if you are willing to suffer a performance hit - you could load it all into Linq to obejcts - and do a Step by step

6
додано
@JensKloster Будь ласка, зверніть увагу, що заява більше не відповідає дійсності - я працюю над комерційним розширенням VS під назвою OzCode. Ми додали Налагодження LINQ у v3.0 і підтримка LINQ2Entities у версії 3.1
додано Автор Omer Raviv, джерело
@Daved hmmm Leniel мав би рацію, якщо OP використовував LinqToObjects - але це не випадок OP. Лямбда OP - це LinqToEntities - і один не може відлагоджувати таких, як Leiel. Я відхилив свою відповідь
додано Автор Jens Kloster, джерело
Я не збираюся знижувати рейтинг, але перегляньте нижче stackoverflow.com/a/22518808/2754848 і знайдіть рішення, яке працює досить добре.
додано Автор Daved, джерело
Справедливо. Я читав над цією частиною. Дякуємо за редагування рішення. Linq до Obj дивіться нижче. Linq до Entity виглядають вище :)
додано Автор Daved, джерело

Можна додати контрольні точки на будь-який власний код.

Покладіть курсор на 'x.e' і натисніть F9.

5
додано

Для будь-яких майбутніх читачів це тепер було включено до Visual Studio. Починаючи з попереднього перегляду Visual Studio 2015, тепер можна налагоджувати лямбда-вираз під час налагодження. Всі вікна налагодження, включаючи Watch, QuickWatch і Immediate підтримують оцінку lambda виразу. Детальніше про це можна дізнатися тут .

3
додано

Немає жодного способу побачити значення змінних x або e , оскільки linq до orm не виконується, перекладається/інтерпретується для створення запиту sql.

1
додано

I don't know how to this directly in Visual Studio, but you should have a look at LinqPad: http://www.linqpad.net/

0
додано

Я повинен був "Включити тільки мій код" в Інструменти/Параметри/Налагодження. Щоб побачити різні результати між Lambda-методами, я помістив .ToList() між ними.

0
додано
У мене є VS 2015 корпоративне видання, зробив це налаштування, але все ще не працює
додано Автор Adeem, джерело
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug