2010-02-19 25 views
2

我有一個函數在我的EDM之外,我想將它包含在我的一些Linq to Entities表達式中。該函數返回一個Intn的IEnumerable。我怎麼可能會使用它的一個例子是:指示Linq實體解析函數的結果,而不是函數調用

context.Employees.Where(e => GetValidEmployeeIds().Contains(e.EmployeeId)); 

功能GetValidEmployeeIds是返回IEnumerable的功能。這個函數的結果不是我可以從數據庫中得到的東西 - 我幾乎必須從EDM中獲取它。

當我執行代碼行時,我得到了「LINQ to Entities does not recognized the method」 - 這使得自從。但是,如果我打破召喚出來表達的正常工作:

var validEmployees = GetValidEmployeeIds(); 
context.Employees.Where(e => validEmployees.Contains(e.EmployeeId)); 

我的問題是:有什麼我能做的指示LINQ到實體不解析函數的表達式的一部分?而是解析函數的結果。我希望有一個屬性,我可以裝飾方法,但一直沒有找到。

通常情況下,我只需打開電話而不直接在表達式中使用它即可。但是,我將會很多地使用這個調用,希望能夠清理代碼。

回答

1

不,你需要移動的函數調用:

也就是說,這樣的:

var q = Context.Entities.Where(e => e.Something == DoStuff()); 

...有可能成爲:

var stuff = DoStuff(); 
var q = Context.Entities.Where(e => e.Something == stuff); 

然而,如果你可以把你的功能放入Expression,然後你可以直接使用它:

var stuff = DoStuff(); 
Expression<Func<Entity, bool>> predicate = e => e.Something == stuff; 
var q = Context.Entities.Where(predicate); 

...所以你可能能清理你的剪切和粘貼的方式。

相關問題