110,545
社区成员
发帖
与我相关
我的任务
分享
List.Where(new Func<Class, bool>(Where));
private bool Where(Class c)
{
//组织表达式,返回bool
}
这个应该相对灵活一点点,不知道能不能满足你的要求,7楼那个不错。
Expression<Func<XXX, bool>> expression = t => true;
expression = expression.And(t => t.AAA == 1);
expression = expression.And(t => t.BBB > 1);
var ds = products.AsQueryable().Where(expression).ToList();
public static class PredicateExtensions
{
public static Expression<Func<T, bool>> True<T>()
{
return f => true;
}
public static Expression<Func<T, bool>> False<T>()
{
return f => false;
}
public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expression1, Expression<Func<T, bool>> expression2)
{
var invokedExpression = Expression.Invoke(expression2, expression1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>(Expression.Or(expression1.Body, invokedExpression), expression1.Parameters);
}
public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expression1, Expression<Func<T, bool>> expression2)
{
var invokedExpression = Expression.Invoke(expression2, expression1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>(Expression.And(expression1.Body, invokedExpression), expression1.Parameters);
}
}