Ho 3 predicati, mi piacerebbe fare un AndAlso
tra. Ho trovato diversi campioni sulla lavagna, ma non posso risolvere il mio problema.AndInso tra più espressioni <Func <T, bool>>: referenziato dall'ambito
Questi predicati sono: Expression<Func<T, bool>>
ho questo codice:
Expression<Func<T, bool>> predicate1 = ......;
Expression<Func<T, bool>> predicate2 = ......;
Expression<Func<T, bool>> predicate3 = ......;
ho creare un metodo di estensione per fare un "AndAlso":
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]);
}
io uso come questo:
var finalPredicate = predicate1
.AndAlso<MyClass>(predicate2)
.AndAlso<MyClass>(predicate3);
Il predicato guardare questo:
Quando uso in una query:
var res = myListAsQueryable().Where(finalPredicate).ToList<MyClass>();
ottengo questo errore: variabile 'p' di tipo 'BuilderPredicate.MyClass' fatto riferimento dal campo di applicazione '' , ma non è definito
Potrebbe dirmi cosa c'è che non va?
Grazie mille,
Ho visto il codice di Marc, ma non ha funzionato non ricordo perché Ma provo ad agrain ora –
Provalo e fammi sapere se non funziona - ha funzionato per me (devi solo assicurarti che sia accessibile al tuo codice, cioè pubblico o interno; lo cambierò nella mia risposta) –
Sì, questo è lavoro. Non so cosa ho fatto nel mio test precedente. Ma ad essere onesti, non è molto chiaro nella mia mente come funziona tutto questo :) –