Beitritt zu Lambda Expressions

8

Wie würde ich zwei Lambda-Ausdrücke wie diese verbinden:

%Vor%

... in einen Ausdruck wie diesen:

%Vor%

Das heißt, sie mit einem AndAlso-Operator zu verbinden. (Oder irgendein anderer Operator für diese Angelegenheit ...)

Es ist mir tatsächlich gelungen, einige scheußliche rekursive Ersetzungen von Lambda-Parametern durchzuführen und dann mit der Expression.AndAlso-Methode zu arbeiten. Aber ich suche etwas Einfacheres.

Zum Beispiel so etwas wie: (Was offensichtlich nicht funktioniert.)

%Vor%     
LaZe 01.03.2010, 18:46
quelle

3 Antworten

2

Ihr "so etwas wie" würde funktionieren, wenn Sie mit normalen Delegierten arbeiten würden. Aber wenn Sie Ausdrucksbäume verwenden müssen, sehe ich keine andere Lösung als die rekursive Ersetzung.

In .NET 4 können Sie den System.Linq.Expressions.ExpressionVisitor verwenden, um diese Art von rekursivem Ersetzen viel einfacher zu machen. Betrachten Sie für .NET 3.5 dieses Beispiel: Ссылка

Mit dem ExpressionVisitor müssen Sie nur Methoden für die zu ersetzenden Knotentypen überschreiben, und der umgebende Baum wird automatisch rekonstruiert.

Wenn Sie mit Bedingungen für die Verwendung mit LINQ arbeiten, ist es eine viel einfachere Lösung, Bedingungen dynamisch zu kombinieren, indem Sie Where () mehrmals aufrufen.

    
Daniel 01.03.2010, 19:02
quelle
2

Es ist nicht so schlimm mit Expression.Invoke ...:

%Vor%     
Richard Hein 01.03.2010 20:37
quelle
1

Ich habe gerade entdeckt, wie man das mit .NET 4 mit einer neuen Update-Methode macht. Da es eine neue Methode ist, nehme ich an, dass sie es auch benötigt haben. Ich bin wirklich glücklich damit, weil die .NET 3.5 Lösung wirklich hässlich ist. (HINWEIS: Diese Lösung funktioniert nicht. Überprüfen Sie die Kommentare.)

%Vor%     
LaZe 01.03.2010 19:12
quelle

Tags und Links