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

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

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

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

你可以做几件事:

  1. 创建一个调用所需lambda的方法,然后将该方法调用放入watch语句中。

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

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

编辑:

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

我正在挖掘这个旧线程,因为那些还不够运用VS 2015但仍然在前一版VS中缺少这个缺失function​​的那个。

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

我喜欢用于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调试function,非常棒 。 您可以在LINQ语句的每个级别跟踪正在修改的集合的状态。

Visual Studio 2015中,您将能够调试lambda表达式 (在撰写本文时它是预览版 )。 你将能够添加lambda表达式等手表。

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

我不确定这是不是你的意思(我可能会误解)但我可以通过查看Locals窗口并展开查询变量的Results视图来查看LINQ查询的结果。 在此处输入图像描述

在那之内,我可以进一步扩展并查看内部数据: 在此处输入图像描述