items=[{ code="123",name="小红", code="122",name="小蓝", code="121",name="小绿", }];
table查询满足items的数据,table有对应的code,name字段
public static class PredicateBuilder { 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>> expr1, Expression<Func<T, bool>> expr2) { var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>()); return Expression.Lambda<Func<T, bool>> (Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters); } public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2) { var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>()); return Expression.Lambda<Func<T, bool>> (Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters); } public static Predicate<T> ConvertToPredicate<T>(this Func<T, bool> func) { return new Predicate<T>(func); } }
var pre = PredicateBuilder.False<Item>(); foreach (var cd in catalogs) { var cataPre = PredicateBuilder.True<Item>(); if (!string.IsNullOrWhiteSpace(cd.BrandCd)) { cataPre = cataPre.And((item) => item.BrandCd == cd.BrandCd); } if (!string.IsNullOrWhiteSpace(cd.NameCd)) { cataPre = cataPre.And((item) => item.NameCd == cd.NameCd); } pre = pre.Or(cataPre); } //true拼接and,false拼接or
上个问题回复了,你看看行不行