c# lamuda 表达式拼接
发布日期:2022/8/31 作者:
浏览:906
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); }
用法:
List<EasyuiFilter> filter = Newtonsoft.Json.JsonConvert.DeserializeObject<List<EasyuiFilter>>(filterRules); Expression<Func<WebError, bool>> lmd = c => c.ID != 0; if (filter.Any(c => c.Field == "Code")) { EasyuiFilter item = filter.Where(f => f.Field == "Code").FirstOrDefault(); if (item.Op == "equal") { lmd = lmd.And(c => c.Code == Convert.ToInt32(item.Value)); } else { lmd = lmd.And(c => c.Code != Convert.ToInt32(item.Value)); } } if (filter.Any(c => c.Field == "IP")) { EasyuiFilter item = filter.Where(f => f.Field == "IP").FirstOrDefault(); if (item.Op == "equal") { lmd = lmd.And(c => c.IP == item.Value); } else { lmd = lmd.And(c => c.IP != item.Value); } }
//使用lamada变量 _context.WebErrors.Where(lmd).Count()
下拉加载更多评论