Ich habe 3 Prädikate, ich möchte eine AndAlso
zwischen machen. Ich habe mehrere Beispiele auf dem Board gefunden, kann aber mein Problem nicht lösen.AndAlso zwischen mehreren Ausdruck <Func <T, bool>>: referenziert von Bereich
Diese Prädikate sind: Expression<Func<T, bool>>
Ich habe diesen Code:
Expression<Func<T, bool>> predicate1 = ......;
Expression<Func<T, bool>> predicate2 = ......;
Expression<Func<T, bool>> predicate3 = ......;
Ich erstelle eine Erweiterungsmethode eine "AndAlso" zu machen:
public static Expression<Func<T, bool>> AndAlso<T>(
this Expression<Func<T, bool>> expr,
Expression<Func<T, bool>> exprAdd)
{
var param = Expression.Parameter(typeof(T), "p");
var predicateBody = Expression.AndAlso(expr.Body, exprAdd.Body);
return Expression.Lambda<Func<T, bool>>(predicateBody, param);
//Tried this too
//var body = Expression.AndAlso(expr.Body, exprAdd.Body);
//return Expression.Lambda<Func<T, bool>>(body, expr.Parameters[0]);
}
ich wie folgt verwenden:
var finalPredicate = predicate1
.AndAlso<MyClass>(predicate2)
.AndAlso<MyClass>(predicate3);
Das Prädikat aussehen:
Wenn ich in einer Abfrage verwenden:
var res = myListAsQueryable().Where(finalPredicate).ToList<MyClass>();
ich diesen Fehler: Variable 'p' vom Typ 'BuilderPredicate.MyClass' von Umfang verwiesen wird '' aber es ist nicht definiert
Können Sie mir sagen, was los ist?
Vielen Dank,
ich Marcs Code sah, aber hat nicht funktioniert erinnere mich nicht, warum. Aber ich versuche jetzt agrain –
Versuchen Sie es und lassen Sie mich wissen, wenn es nicht funktioniert - es funktionierte für mich (Sie müssen nur sicherstellen, dass es für Ihren Code zugänglich ist, dh öffentlich oder intern; Ich werde das in meiner Antwort ändern) –
Ja, das ist Arbeit. Ich weiß nicht, was ich in meinem vorherigen Test gemacht habe. Aber um ehrlich zu sein, es ist nicht sehr klar in meinem Kopf, wie all das funktioniert :) –