2016-08-03 92 views
0

我有这样的(非常简化的版本)的方法:如何调用不带参数的方法,该方法返回Expression <Func <Model,String >>?

public static Expression<Func<MyModel, String>> GetSomeStatus() 
{ 
    return myModel => myModel.IsTrue ? "That's true" : "That's false"; 
} 

所以,我怎么能叫它在声明中这样的:

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

注:我最初的问题是调用一些辅助方法,它在Select方法里面返回String,但是我当然有例外,比如Linq to entities doesn't recognize this method...,所以我试图重写它(见上面的例子),但是现在我只是不明白如何调用它(我是相对的EF中新增)。我知道简单的AsEnumerable呼叫在Select之前,它解决了我最初的问题,但我想保留此查询为IQueryable供以后使用。

+0

通常情况下,你不能。你可以使用第三方库吗? –

+0

伊万,我可以试试。如果你知道,请与我分享。 –

回答

1

开箱即不可能。但是你可以使用例如LINQKitAsExpandableInvoke扩展方法是这样的:

首先,你需要存储在一个变量表达式,否则你会得到著名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) 
    }); 
相关问题