Ejemplo n.º 1
0
        public Expression Combine <T>(ExpressionType expressionType,
                                      ParameterExpression parameter,
                                      params Expression <Func <T, bool> >[] conditions)
        {
            var updatedConditionBodies = conditions
                                         .Select(c => ReplaceParameterVisitor
                                                 .GetBodyWithNewParameter <T>(c, parameter));

            var root = AggregateWithPrevious(updatedConditionBodies,
                                             expressionType);

            return(root);
        }
        public static Expression GetBodyWithNewParameter <T>(
            Expression <Func <T, bool> > expression,
            ParameterExpression parameter)
        {
            if (parameter.Type != typeof(T))
            {
                throw new ArgumentException($@"The parameter type {parameter.Type.Name} is not valid for the provided expression");
            }

            var visitor = new ReplaceParameterVisitor(
                expression.Parameters.First(), parameter);

            return(visitor.Visit(expression.Body));
        }