2011-03-31 15 views
4

我需要將參數傳遞給需要Expression<Func<T, bool>>的方法。將始終返回true的Linq表達式

如何傳遞一個總會返回true的表達式?

使用obj => true不起作用,因爲框架在運行時抱怨它無法從True常量中確定memeber類型。

+3

請提供一個完整的例子,告訴我們您正在使用哪個提供商。 – 2011-03-31 12:32:48

+4

我認爲你的錯誤是在別的地方。這編譯:新列表().AsQueryable()。其中​​(p => true);',和'Where'的參數的類型是'Expression >' – xanatos 2011-03-31 12:35:18

回答

11

如果你有這樣的

void TakeExpression<T>(Expression<Func<T, bool>> expr) 

一個功能你應該這樣調用它,指定T類:

TakeExpression<int>(_ => true) 

它應該工作。

+0

是的,通常在Linq它正在處理源對象,所以它可以從中獲得它的類型。 – Rangoric 2011-03-31 12:50:40

+0

確切地說,源類型不能被隱式確定,所以你應該明確地傳遞它。 – thinkbeforecoding 2011-03-31 13:07:57

-1

有兩個問題在這裏:

1)如果你傳遞一個斷言,這樣你總是希望返回true,那麼它是沒有太大的謂語的。您可能可以忽略您嘗試進行的任何呼叫。

2)如果你只想返回true,你可以簡單的使用更詳細的lambda語法得到你想要的東西:

sample.AsQueryable().Where((x) => { return true; }); 

更詳細的語法允許您指定接近一個匿名函數,而仍然是一個表達。

1

您需要定義要傳遞的參數類型:

(object o) => true 

或者

(int a) => true