在watch / debugger中查看LINQ查询的结果

时间:2013-09-04 18:03:54

标签: c# .net visual-studio-2010 linq

有没有办法在Visual Studio 2010中查看LINQ查询的结果?如果将查询添加为监视表达式,则会显示“表达式不能包含lambda表达式”。

在某些测试代码中,我汇总了一些子项的一组指标的总数,并将该总和与其父项值进行比较,以获得相同的指标(深层嵌套if-else)。我的所有查询都在if语句中。如何在不将结果分配给局部变量的情况下查看这些值?分配使我的行数翻倍,除了调试之外没有任何好处。有没有人有他们用来在调试器中查看LINQ查询结果的工作?

4 个答案:

答案 0 :(得分:12)

您目前无法在Visual Studio的监视列表中使用lambda表达式。

你可以做几件事:

  1. 创建一个调用所需lambda的方法,然后放入该方法 请致电您的观察声明。

  2. 将所需的lambda表达式设置为变量,然后查看 该变量的内容。请注意,这将枚举 通过表达,可能会引起副作用。

  3. 我想这会出现在VS的功能请求列表中,但是MSFT尚未完成。希望在此期间有所帮助。

    编辑:

    好消息!您现在可以在Visual Studio 2017中评估lambdas.Huzzah!

答案 1 :(得分:6)

我正在挖掘这个旧线程,因为那些没有足够幸运使用VS 2015而且仍然在以前版本的VS中缺少这个缺失功能​​的那些。

为了调试而必须拆分代码有点痛苦。

我喜欢用于 Where 查询的替代方法是: DynamicQueryable

假设您有疑问:

myClass.Records.Where(rec => rec.Country.Code == "FRA")

然后使用DynamicQueryable,您可以输入一个看起来像:

的watch语句
System.Linq.Dynamic.DynamicQueryable.Where(myClass.Records.AsQueryable(), "Country.Code == \"FRA\"").ToList()

编写起来相当容易(同样适用于Where查询),因为这是一个监视语句,更新很快并且对调试有用。考虑始终添加ToList()或ToArray()以自动在watch语句中应用投影。

对于复杂的Select语句,我想它不会那么方便,但可能仍然有帮助。

我还建议使用名为OzCode的工具。最新版本包含LINQ debug feature which is quite awesome。您可以跟踪在LINQ语句的每个级别修改的集合的状态。

答案 2 :(得分:5)

In Visual Studio 2015 you'll be able to debug lambda expressions(在撰写本文时它是预览)。您将能够添加具有lambda表达式等的手表。

必须重写Expression Evaluator,因此缺少许多功能:远程调试ASP.NET,在立即窗口中声明变量,检查动态变量等。此外,目前还不支持需要调用本机函数的lambda表达式。 VS2015发布后,所有功能都将完成。

答案 3 :(得分:3)

我不确定这是不是你的意思(我可能会误解)但我可以通过查看Locals窗口并展开查询变量的Results视图来查看LINQ查询的结果。 enter image description here

在此范围内,我可以进一步扩展并查看内部数据: enter image description here