2012-08-26 103 views

回答

1

您的代碼有兩個問題。

首先是你如何聲明你的方法:

Func<T, bool> ComposeFilter 

當你這樣做,你是返回一個編譯代表,以及被選擇的Where擴展方法重載是從Enumerable而不是Queryable

你必須將其聲明爲:

Expression<Func<T, bool>> ComposeFilter 

的第二個問題是,你寫的代碼不能被轉換爲表達式樹。由於您不是使用原語,而是動態構建表達式,因此您需要了解System.Linq.Expressions中的內容。

+0

好吧,這是我的預期,我需要建立一個表達式而不是一個函數。我想知道爲什麼我沒有得到「不支持的例外」。 NHibernate重新調整string.Contains函數嗎? – fso

+0

NHibernate從來沒有看到你的代碼。只要'Enumerable'接管,未經過篩選的查詢就會被執行,然後結果被Linq-to-object過濾。 –