我已经获取了 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.
所以我设置了使用监 window 口进行调试。现在在观察窗口中分析以下语句:
entityVoucherDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault()
监 window 口生成以下错误:
Expression cannot contain lambda expressions.
谁能告诉我是什么原因?
最佳答案
尚不支持在调试器(监 window 口)中评估 Lambda 表达式。
有一个开放的feature request
为了调试您的问题,您应该将 lambda 表达式的结果分配给专用变量并在以下语句中使用它。
var entity = entityvDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault();
08/2014 更新: Microsoft 发布了功能请求的更新,宣布他们开始处理它:
So here’s where we stand.
- 1) We want this to work as much as you do. It’s not under review – it’s in progress.
- 2) We figured out how to make it work; it simply requires rewriting everything.
- 3) We’re rewriting everything.
- 4) Rewriting everything takes a lot of time and a lot of testing.
更新 11/2014: 微软最终在 VS2015 中实现了一些限制。 Read here.
关于c# - 表达式不能包含 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23470607/