首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >“不能将具有语句体的lambda表达式转换为表达式树”

“不能将具有语句体的lambda表达式转换为表达式树”
EN

Stack Overflow用户
提问于 2011-03-03 18:17:21
回答 11查看 130.3K关注 0票数 216

在使用EntityFramework,时,我在尝试编译以下代码时收到错误"A lambda expression with a statement body cannot be converted to an expression tree“:

代码语言:javascript
复制
Obj[] myArray = objects.Select(o =>
{
    var someLocalVar = o.someVar;

    return new Obj() { 
    Var1 = someLocalVar,
    Var2 = o.var2 };
}).ToArray();

我不知道这个错误是什么意思,最重要的是我不知道如何修复它。有什么帮助吗?

EN

回答 11

Stack Overflow用户

发布于 2011-03-03 18:24:33

objects是Linq-To-SQL数据库上下文吗?在这种情况下,只能使用=>运算符右侧的简单表达式。原因是,这些表达式不会被执行,但会被转换为SQL,以便对数据库执行。尝尝这个

代码语言:javascript
复制
Arr[] myArray = objects.Select(o => new Obj() { 
    Var1 = o.someVar,
    Var2 = o.var2 
}).ToArray();
票数 138
EN

Stack Overflow用户

发布于 2013-02-23 18:04:55

您可以在IEnumerable集合的lamba表达式中使用语句体。试试这个:

代码语言:javascript
复制
Obj[] myArray = objects.AsEnumerable().Select(o =>
{
    var someLocalVar = o.someVar;

    return new Obj() 
    { 
        Var1 = someLocalVar,
        Var2 = o.var2 
    };
}).ToArray();

通知:

使用此方法时要仔细考虑,因为这样,所有查询结果都将存储在内存中,这可能会对其余代码产生不必要的副作用。

票数 113
EN

Stack Overflow用户

发布于 2011-03-03 18:24:11

这意味着您不能在需要将lambda表达式转换为表达式树的地方使用带有“语句体”的lambda表达式(即使用大括号的lambda表达式)(例如,使用linq2sql时就是这种情况)。

票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5179341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档