2016-07-29 19 views
1

ich eine Liste der Lambda-Ausdrücke haben List<Func<SomeObject, bool>> filterList; Diese Filterliste eine Sammlung von SomeObject leicht so zu filtern, wird unter Verwendung von:Kombinieren Lambda-Ausdrücke dynamisch für wo

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

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

Jetzt möchte ich einige Filter kombinieren - aber Ich möchte sie mit AND- oder OR-Anweisungen kombinieren. Als Beispiel:.. Der Benutzer hat drei Filter A, B und C und will sie so etwas wie „A & & (B || C) verbindet

Ich habe keine Ahnung, Howto dies tut

+1

eigentlich sind Sie bereits sie alle mit Vereinigen und –

+0

Wie würden Sie wissen, wenn sie mit kombinieren und und wann es zu tun mit oder? –

+0

Ja, aber ich möchte einen komplexen Filter einrichten (Beispiel "A && (B || C)"). : P – user6537157

Antwort

2

Sie verwenden Func<T>, nicht Expression<Func<T>>, wodurch sie es unmöglich, ‚Umschreiben‘ macht oder mehrere func die in einem einzigen kombinieren. So können Sie sie nur in einer bestimmten Reihenfolge

Sie sind bereits die Kombination mit uND

ausführen können..

Um zwei (oder mehr) Kriterien zu kombinieren wi th OR, dies tun:

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

A && (B || C) zu tun, dies zu tun:

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

Ok, wenn ich 'Expression >' - wie kann ich sie "umschreiben"? – user6537157

+0

Überprüfen Sie diese Antwort: http://stackoverflow.com/a/457328/261050 – Maarten

+0

Danke, hat gut funktioniert. – user6537157