2016-08-03 86 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) 
    }); 
相關問題