2016-07-29 37 views
1

我的λ-表達式列表List<Func<SomeObject, bool>> filterList; 這filterlist使用可以輕鬆過濾的SomeObject集合是這樣的:結合LAMBDA表達式動態的地方

List<SomeObject> randomList; //filled with random stuff 

foreach (Func<SomeObject, bool> filter in filterlist) 
    randomList = randomList.Where(filter).ToList(); 

現在我想一些過濾器組合 - 但我想將它們與AND或OR語句結合起來。 作爲例子:該用戶有3個過濾器A,B和C,並希望將它們組合成類似「A & &(B || C)

我不知道HOWTO做到這一點

+1

其實你已經在他們所有組合和 –

+0

你怎麼會知道什麼時候該用結合,和什麼時候做與OR? –

+0

是的,但我想設置複雜的過濾器(例如「A &&(B || C)」)。 :P – user6537157

回答

2

你使用Func<T>,不Expression<Func<T>>,這使得它不可能「改寫」他們,或在一個單一的一個組合多個FUNC的。所以你只能按照一定的順序執行。

您已經將它們與和組合。

要結合兩個(或更多)標準wi日OR,做到這一點:

randomList = randomList.Where(x => filter1(x) || filter2(x)).ToList(); 

要做到A && (B || C),這樣做:

randomList = randomList.Where(x => filterA(x) && (filterB(x) || filterC(x))).ToList(); 
+0

好的,當我使用Expression >時 - 我怎樣才能「重寫」它們? – user6537157

+0

檢查答案:http://stackoverflow.com/a/457328/261050 – Maarten

+0

謝謝,運作良好。 – user6537157