Пример #1
0
        public static Func <Expression, Expression, BinaryExpression> GetCombineExpressionDelegate(this ExpressionCombine combinor)
        {
            switch (combinor)
            {
            case ExpressionCombine.And:
                return(Expression.And);

            case ExpressionCombine.Or:
                return(Expression.Or);

            default:
                throw new NotImplementedException();
            }
        }
Пример #2
0
        public static Expression <Func <T1, T2> > Combine <T1, T2>(this Expression <Func <T1, T2> > first, Expression <Func <T1, T2> > second, ExpressionCombine combinor)
        {
            var param     = Expression.Parameter(typeof(T1), "x");
            var newFirst  = first.ReplaceParameter(param);
            var newSecond = second.ReplaceParameter(param);

            var expressionCombinor = combinor.GetCombineExpressionDelegate();
            var combinedExpression = expressionCombinor(newFirst.Body, newSecond.Body);

            return(Expression.Lambda <Func <T1, T2> >(combinedExpression, param));
        }