Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
 public ExpressionGroup()
 {
     TupleList             = new List <(string, object, ExpressionType)>();
     ExpressionCombineType = new ExpressionCombineType();
     ExpressionGroupsList  = new List <ExpressionGroup <T> >();
 }
Esempio n. 3
0
        /// <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);
        }