在watch / debugger中查看LINQ查询的结果
有没有办法在Visual Studio 2010中查看LINQ查询的结果? 如果将查询添加为监视表达式,则会显示“表达式不能包含lambda表达式”。
在一些测试代码中,我汇总了一些子项的一组指标的总和,并将该总和与其父项值进行比较,以获得相同的指标(深嵌套if-else)。 我的所有查询都在if语句中。 如何在不将结果分配给局部变量的情况下查看这些值? 分配使我的行数增加一倍,除了调试之外没有任何好处。 有没有人有他们用来在调试器中查看LINQ查询结果的工作?
您当前无法在Visual Studio的监视列表中使用lambda表达式。
你可以做几件事:
-
创建一个调用所需lambda的方法,然后将该方法调用放入watch语句中。
-
将所需的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查询的结果。
在那之内,我可以进一步扩展并查看内部数据: