表达式不能包含lambda表达式

时间:2014-05-05 10:46:59

标签: 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.

所以我设置了使用监视窗口进行调试。现在,在观察窗口中分析以下语句:

entityVoucherDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault()

生成以下错误的监视窗口:

  

表达式不能包含lambda表达式。

如果有人可以告诉我可能是什么原因?

2 个答案:

答案 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?

这是original source