public static LambdaExpression Rewrite(Expression body, ParameterExpression[] parameters) { var rewriter = new ParamArrayRewriter(parameters); var newBody = rewriter.Visit(body); return(Expression.Lambda(newBody, paramParam)); }
public static LambdaExpression Extract(Expression exp, out IList <object> values) { var extractor = new ConstantExtractor(); var body = extractor.Visit(exp); values = extractor.constantValues.ToArray(); if (values.Count >= 5) { // Can't create a lambda with more than 4 parameters. Go figure. values = new object[] { values }; return(ParamArrayRewriter.Rewrite(body, extractor.newParameters.ToArray())); } return(Expression.Lambda(body, extractor.newParameters.ToArray())); }