Mam 3 predykaty, chciałbym dokonać AndAlso
między. Znalazłem kilka próbek na tablicy, ale nie mogę rozwiązać mojego problemu.AndAlso między kilkoma wyrażeń <Func <T, bool>>: odwołuje się z zakresu
te predykaty są: Expression<Func<T, bool>>
mam ten kod:
Expression<Func<T, bool>> predicate1 = ......;
Expression<Func<T, bool>> predicate2 = ......;
Expression<Func<T, bool>> predicate3 = ......;
utworzyć metodę rozszerzenia do dokonania "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]);
}
używam tak:
var finalPredicate = predicate1
.AndAlso<MyClass>(predicate2)
.AndAlso<MyClass>(predicate3);
Predykat wyglądać następująco:
Kiedy używać w zapytaniu:
var res = myListAsQueryable().Where(finalPredicate).ToList<MyClass>();
otrzymuję ten błąd: zmienną 'p' typu 'BuilderPredicate.MyClass' odwołuje się od zakresu '' , ale nie jest zdefiniowany
Czy możesz mi powiedzieć, co jest nie tak?
Dzięki dużo,
widziałem kod Marca, ale nie działa nie pamiętam dlaczego. Ale próbuję teraz agresji –
Wypróbuj i daj mi znać, jeśli to nie działa - zadziałało dla mnie (musisz tylko upewnić się, że jest dostępny dla twojego kodu, tj. Publiczny lub wewnętrzny, zmienię to w mojej odpowiedzi) –
Tak, to jest praca. Nie wiem, co zrobiłem w poprzednim teście. Ale szczerze mówiąc, nie jest dla mnie jasne, jak to wszystko działa :) –