c# - 表达式不能包含 lambda 表达式

标签 c# linq entity-framework entity-framework-4 lambda

我已经获取了 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/

相关文章:

c# - 使用 LINQ 修剪 List<string[]> 中所有字符串的最简单方法?

c# - 如果一个方法在 linq 查询中,它会被多次调用吗?

database - 带有 OLE DB Access 数据源的 ADO.NET Entity Framework

c# - 在存储库模式中按 ID 过滤是不好的做法吗

c# - 以编程方式在 IIS 上为自定义 Web 应用程序项目模板 vs2010 创建虚拟目录

c# - 在上一个任务完成之前再次调用 WriteLineAsync 是否安全?

c# - Linq to SQL 连接协助

c# - 选择整个实体时, Entity Framework 返回过时的数据,但仅选择一个字段时, Entity Framework 返回最新数据

c# - 不支持 MongoDB 序列化 ()

c# - 图形 API - 权限不足,无法完成操作