如何调用没有返回Expression <func <model,string =“”>&gt;?的参数的方法

时间:2016-08-03 12:48:07

标签: c# entity-framework linq linq-to-entities

我有一个像这样的方法(非常简化的版本):

var efRequest = db.Table1.Where(...)
                            .Select(x => new MyAnotherModel
                            {
                                Status = ""; // call GetSomeStatus() here; x is of MyModel type
                            })

那么,我怎么能在声明中这样称呼它:

String

注意:我的初始问题是调用一些帮助方法,该方法在Select方法中返回Linq to entities doesn't recognize this method...,但当然我有例外AsEnumerable,所以我&#39我试图重写它(见上面的例子),但现在我只是不明白如何调用它(我在EF中相对较新)。我知道Select之前的简单IQueryable调用解决了我的初始问题,但我希望将此查询保留为{{1}}以供日后使用。

1 个答案:

答案 0 :(得分:1)

开箱即用是不可能的。但您可以使用LINQKit AsExpandableInvoke扩展方法,例如:

首先,您需要将表达式存储在变量中,否则您将获得着名的Linq to entities doesn't recognize this method...异常:

var getSomeStatus = GetSomeStatus();

然后在查询中使用它(在调用AsExpandable之后,生成的查询表达式树被正确地进行后处理):

var efRequest = db.Table1.AsExpandable()
    .Where(...)
    .Select(x => new MyAnotherModel
    {
        Status = getSomeStatus.Invoke(x)
    });