如何调试Linq Lambda表达式?

我正在使用Entity Framework和Linq to Entitites。

我想知道Visual Studio 2012中是否有任何方法可以逐步调试此代码。 在放置断点的那一刻,光标越过它但不会进入。

我更感兴趣的是看到xe的值..而不是例如生成的sql。

注意:我可以使用其他工具或Visual Studio插件。

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

如果您使用的是Linq to Entities提供程序, 则无法调试Lambda表达式。

但是你可以看看它翻译成什么SQL。 此外,如果您愿意遭受性能损失 – 您可以将其全部加载到Linq中以进行操作 – 并逐步执行

请务必阅读有关此问题的官方MSDN文档:

调试LINQ

并请在Visual Studio的用户语音页面上为此建议投票:

调试Lambda表达式

Allon Guralnek在20143月18日下午12:37评论了一种仅用键盘设置断点的方法:

@Anonymous:今天你可以通过在lambda中设置一个断点来实现这一点,从而使你能够检查进出lambda的每个值。 据我所知,你不能使用鼠标在lambda中设置断点,你必须使用键盘。 将光标放在lambda体内(例如,在第一个标记上,或者在=>之后的任何内容以及随后的空格),然后按F9(或者用于放置断点的任何键盘快捷键)。 只有lambda语句的内部会变成红色,并且调试器将针对lambda评估的每个项目中断(因此对于100个项目的数组,使用.Where()将导致断点达到100次)。

这是我当前的Visual Studio 2013中的实际操作:

在此处输入图像描述

正如您所看到的,它运行良好,并允许我们查看正在测试的给定属性的值。 这肯定是一个很棒的工具/救生员! 🙂

您可以在任何自己的代码上添加断点。

所以将光标放在’x.e’,然后按F9。

对于任何未来的读者,这已经包含在Visual Studio中。 从Visual Studio 2015 Preview开始,您现在可以在调试期间调试lambda表达式。 所有调试窗口包括Watch,QuickWatch和Immediate支持lambda表达式评估。 你可以在这里阅读更多相关信息。

没有办法看到xe变量的值,因为没有执行linq到orm,它被翻译/解释以生成sql查询。

我不知道如何在Visual Studio中直接使用它,但你应该看看LinqPad: http : //www.linqpad.net/

我必须在工具/选项/调试中“启用我的代码”。 为了查看Lambda方法之间的不同结果,我在它们之间添加了.ToList()。