C# 表达式不能包含lambda表达式

C# 表达式不能包含lambda表达式,c#,linq,entity-framework,entity-framework-4,lambda,C#,Linq,Entity Framework,Entity Framework 4,Lambda,我已获取如下所示的列表对象(使用.Include()): 代码编译非常完美。但是,运行时返回以下错误(尽管包括所有导航): 因此,我设置使用“监视”窗口进行调试。现在,在“监视”窗口中分析以下语句时: entityVoucherDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault() 监视窗口生成以下错误: 表达式不能包含lambda表达式 请告诉我原因是什么?在调试器(监视窗口)中计算Lambda表达式还不受支持 这是一个

我已获取如下所示的
列表
对象(使用
.Include()
):

代码编译非常完美。但是,运行时返回以下错误(尽管包括所有导航):

因此,我设置使用“监视”窗口进行调试。现在,在“监视”窗口中分析以下语句时:

entityVoucherDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault()
监视窗口生成以下错误:

表达式不能包含lambda表达式


请告诉我原因是什么?

在调试器(监视窗口)中计算Lambda表达式还不受支持

这是一个开放的市场

为了调试您的问题,您应该将lambda表达式的结果分配给一个专用变量,并在以下语句中使用该变量

var entity = entityvDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault();

更新日期2014年8月8日: Microsoft发布了功能请求的更新,宣布他们已开始使用该功能:

这就是我们的立场

  • 1) 我们希望这和你一样有效。这不是在审查中,而是在进行中
  • 2) 我们找到了让它工作的方法;它只需要重写所有内容
  • 3) 我们正在重写一切
  • 4) 重写所有内容需要大量时间和大量测试

更新日期2014年11月:
微软最终在VS2015中实现了它,但有一些限制

如果仍然需要使用Visual Studio 2010或2013,可以在package manager控制台中使用lambda表达式。有关详细信息,请参见我的SO帖子:


这是

第一个默认值
明确允许空引用。如果您确定它从不为空,请首先使用
。在假定某些内容不是null之前,请在多行上对null ref进行更多检查。这也将有助于调试。将
entityvDetails.Where(e=>e.sad_id==item.sad_id).FirstOrDefault()的结果分配给专用变量。Microsoft,其中处理现有语言功能的IDE工具被视为附加工具。Visual Studio 2015中现在包括对调试lambda表达式的支持。干杯@KhadimAli我有Visual Studio 2015,现在,在2017年,我仍然看到这条信息。是否有某种非自动更新或设置标志我需要切换?我不确定,因为我还没有在VS2015中使用它。顺便说一句,你有没有尝试过上面博客链接上的简单例子?如果出现这种情况,那么尝试通过逐渐使示例变得复杂以接近您的表达式来隔离问题。最后,您可以在另一个线程上发布代码,提供更多详细信息和发现。问题仍在VS2017上!在Visual Studio 2012中运行
PM>$dte.Debugger.GetExpression(“orders.Where(o=>o.IsValid==true)”时仍在获取“值:表达式不能包含lambda表达式”。唯一的方法是运行($i=0;$i-lt$dte.Debugger.GetExpression(“orders.Count()”).Value;$i++){$a=$dte.Debugger.GetExpression(“orders[$i]”);if($a.Value.IsValid-eq$true){Write Host$i”)“$a.Value$a.Value.IsValid}
Object reference not set to an instance of an object.
entityVoucherDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault()
var entity = entityvDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault();