И также между несколькими выражениями <Func <T, bool >>: ссылка из области видимости
У меня есть 3 предиката, я хотел бы сделатьAndAlso
между. Я нашел несколько образцов на доске, но не могу решить мою проблему.
Эти предикаты:Expression<Func<T, bool>>
У меня есть этот код:
Expression<Func<T, bool>> predicate1 = ......;
Expression<Func<T, bool>> predicate2 = ......;
Expression<Func<T, bool>> predicate3 = ......;
Я создаю метод расширения, чтобы сделать «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]);
}
Я использую так:
var finalPredicate = predicate1
.AndAlso<MyClass>(predicate2)
.AndAlso<MyClass>(predicate3);
Предикат выглядит так:
Когда я использую в запросе:
var res = myListAsQueryable().Where(finalPredicate).ToList<MyClass>();
Я получаю эту ошибку:переменная 'p' типа 'BuilderPredicate.MyClass', на которую ссылается область действия '', но она не определена
Не могли бы вы сказать мне, что не так?
Большое спасибо,