有没有办法在Visual Studio 2010中查看LINQ查询的结果?如果将查询添加为监视表达式,则会显示“表达式不能包含lambda表达式”。
在某些测试代码中,我汇总了一些子项的一组指标的总数,并将该总和与其父项值进行比较,以获得相同的指标(深层嵌套if-else)。我的所有查询都在if语句中。如何在不将结果分配给局部变量的情况下查看这些值?分配使我的行数翻倍,除了调试之外没有任何好处。有没有人有他们用来在调试器中查看LINQ查询结果的工作?
答案 0 :(得分:12)
您目前无法在Visual Studio的监视列表中使用lambda表达式。
你可以做几件事:
创建一个调用所需lambda的方法,然后放入该方法 请致电您的观察声明。
将所需的lambda表达式设置为变量,然后查看 该变量的内容。请注意,这将枚举 通过表达,可能会引起副作用。
我想这会出现在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查询的结果。
在此范围内,我可以进一步扩展并查看内部数据: