我有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>();
我得到这个错误: 变量从范围'引用类型“BuilderPredicate.MyClass”的“P”,但它没有定义
你能告诉我什么是错的?
非常感谢,