使用 EntityFramework 时出现错误:“带有语句主体的 lambda 表达式无法转换为表达式树”
使用 EntityFramework 的 Select 方法时,您可能会遇到错误:“带有语句主体的 lambda 表达式无法转换为表达式树。”当您提供的 lambda 表达式包含语句主体而不是简单表达式时,通常会发生此错误。
理解错误:
在提供的代码片段中:
Obj[] myArray = objects.Select(o => { var someLocalVar = o.someVar; return new Obj() { Var1 = someLocalVar, Var2 = o.var2 }; });
lambda 表达式在返回 Obj 实例之前使用语句体来声明和使用局部变量 someLocalVar。但是,EntityFramework 需要可以直接转换为 SQL 的简单表达式,以实现高效的数据库执行。
解决方案:
要解决此错误,请通过删除语句体并直接赋值:
Arr[] myArray = objects.Select(o => new Obj() { Var1 = o.someVar, Var2 = o.var2 });
通过此修改,lambda 表达式仅包含一个简单的表达式,可以翻译成表达式树,代码就能编译成功。
以上是为什么实体框架抛出'带有语句主体的 lambda 表达式无法转换为表达式树”?的详细内容。更多信息请关注PHP中文网其他相关文章!