/// <summary> /// 用指定的操作连接表达式 /// </summary> /// <param name="expressions">表达式集合</param> /// <param name="combineType">连接方式</param> /// <returns>表达式</returns> public Expression CombinExpressions(List <Expression> expressions, ExpressionCombineType combineType) { Expression where = Expression.Constant(true); if (expressions.Count() > 0) { switch (combineType) { case ExpressionCombineType.And: where = expressions[0]; for (int i = 1; i < expressions.Count(); i++) { where = Expression.And(where, expressions[i]); } break; case ExpressionCombineType.Or: where = expressions[0]; for (int i = 1; i < expressions.Count(); i++) { where = Expression.Or(where, expressions[i]); } break; } } return(where); }
public ExpressionGroup() { TupleList = new List <(string, object, ExpressionType)>(); ExpressionCombineType = new ExpressionCombineType(); ExpressionGroupsList = new List <ExpressionGroup <T> >(); }
/// <summary> /// 组合lambda表达式 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="expressions"></param> /// <returns></returns> public LambdaExpression JoinLambdaExpression(List <LambdaExpression> expressions, ExpressionCombineType combineType) { if (expressions.Count() == 0) { return(null); } LambdaExpression lambda = expressions[0]; if (expressions.Count() > 0) { foreach (var ex in expressions) { var invokedExpr = Expression.Invoke(lambda, ex.Parameters.Cast <Expression>()); switch (combineType) { case ExpressionCombineType.And: lambda = Expression.Lambda(Expression.And(ex.Body, invokedExpr), ex.Parameters); break; case ExpressionCombineType.Or: lambda = Expression.Lambda(Expression.Or(ex.Body, invokedExpr), ex.Parameters); break; } } } return(lambda); }