我已经获取了List<>
对象,如下所示(.Include()
):
List<vDetail> entityvDetails =
context.vDetails
.Include("payInstallment.appsDetail")
.Include("payInstallment.appsDetail.application")
.Include("payInstallment.appsDetail.purposes")
.Where(e => e.vch_id == 123).ToList();
然后在代码中的某处,我尝试过滤实体记录,如下所示:
foreach (vDetail item in lstVDetails)
{
...
int purposeId = entityvDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault().payInstallment.appsDetail.purposes.prp_id;
...
}
代码编译完美。但是,运行时返回跟随错误(尽管包括所有导航):
Object reference not set to an instance of an object.
所以我设置了使用监视窗口进行调试。现在,在观察窗口中分析以下语句:
entityVoucherDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault()
生成以下错误的监视窗口:
表达式不能包含lambda表达式。
如果有人可以告诉我可能是什么原因?
答案 0 :(得分:57)
尚不支持在调试器(监视窗口)中评估Lambda表达式。
Theres打开feature request。
为了调试您的问题,您应该将lambda表达式的结果分配给专用变量,并在以下语句中使用它。
var entity = entityvDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault();
更新08/2014: 微软发布了功能请求的更新,宣布他们开始使用它:
所以这就是我们的立场。
- 1)我们希望这和你一样努力。它没有受到审查 - 它正在进行中。
- 2)我们想出了如何使它发挥作用;它只需要重写一切。
- 3)我们正在改写一切。
- 4)重写所有内容需要花费大量时间和大量测试。
2014年11月更新: 微软最终在VS2015中实现了一些限制。 Read here.
答案 1 :(得分:2)
如果仍需要使用Visual Studio 2010或2013,则可以在程序包管理器控制台中使用lambda表达式。有关详细信息,请在此处查看我的帖子:
Why is it not possible to evaluate lambdas in the immediate window?