14

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

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

4

4 回答 4

14

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

您可以做几件事:

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

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

我想这在 VS 的功能请求列表中,但 MSFT 还没有这样做。希望这在此期间有所帮助。

编辑:

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

于 2013-09-04T18:07:50.920 回答
6

我正在为那些还没有幸运地使用 VS 2015 并且仍然遭受上一版本 VS 中缺少的功能的人挖掘这个旧线程。

为了调试而不得不拆分代码有点痛苦。

我喜欢用于Where查询的另一种方法是:DynamicQueryable

假设您有一个查询:

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

然后使用 DynamicQueryable 您可以输入如下所示的监视语句:

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

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

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

我还建议使用名为OzCode的工具。最后一个版本包含了非常棒的 LINQ 调试功能。您可以在 LINQ 语句的每个级别跟踪正在修改的集合的状态。

于 2016-08-24T15:43:18.890 回答
5

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

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

于 2014-11-12T21:39:15.837 回答
3

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

在其中,我可以进一步扩展并查看里面的数据: 在此处输入图像描述

于 2013-09-04T18:33:04.210 回答