在使用EntityFramework时,当我试图编译以下代码时,我得到了错误“带有语句体的lambda表达式不能转换为表达式树”:
Obj[] myArray = objects.Select(o =>
{
var someLocalVar = o.someVar;
return new Obj() {
Var1 = someLocalVar,
Var2 = o.var2 };
}).ToArray();
我不知道这个错误意味着什么,最重要的是如何修复它。任何帮助吗?
9年的时间太晚了,但是用不同的方法来解决你的问题(没有人提到过吗?)
语句体在Func<>时工作得很好,但在Expression<Func<>>时就不行了。这个IQueryable。Select需要表达式<>,因为它们可以转换为实体框架- Func<>不能。
所以你要么使用AsEnumerable并开始处理内存中的数据(不推荐,如果不是真的必要的话),要么继续使用IQueryable<>,这是推荐的。
有一个叫linq查询的东西可以让一些事情变得更简单:
IQueryable<Obj> result = from o in objects
let someLocalVar = o.someVar
select new Obj
{
Var1 = someLocalVar,
Var2 = o.var2
};
通过让你可以定义一个变量并在select(或where,…)中使用它-你可以继续使用IQueryable,直到你真正需要执行和获取对象。
然后你可以Obj[] myArray = result.ToArray()