I have 3 predicates, I'd like make an AndAlso
between. I found several sample on the board, but can't solve my problem.
These predicates are : Expression<Func<T, bool>>
I have this code :
Expression<Func<T, bool>> predicate1 = ......;
Expression<Func<T, bool>> predicate2 = ......;
Expression<Func<T, bool>> predicate3 = ......;
I create an extension method to make an "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]);
}
I use like this :
var finalPredicate = predicate1
.AndAlso<MyClass>(predicate2)
.AndAlso<MyClass>(predicate3);
The predicate look this :
When I use in a query :
var res = myListAsQueryable().Where(finalPredicate).ToList<MyClass>();
I get this error :
variable 'p' of type 'BuilderPredicate.MyClass' referenced from scope '', but it is not defined
Could you tell me what's wrong ?
Thanks a lot,
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…