我有 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”,但未定义
你能告诉我有什么问题吗?
非常感谢,