private static Expression Apply(this LambdaExpression lambda, bool allowInvoke, params Expression[] exps) { var replacer = new ParameterExpressionReplacer(lambda.Parameters, exps); var result = replacer.Visit(lambda.Body); if (!allowInvoke || !replacer.ReplaceCounts.Where((n, i) => n > 1 && exps[i].IsComplex()).Any()) { return(result); } return(Expression.Invoke(lambda, exps)); }
public static LambdaExpression TrimParameters(this LambdaExpression lambda, int skip = 0) { var replacer = new ParameterExpressionReplacer(lambda.Parameters, lambda.Parameters.ToArray <Expression>()); replacer.Visit(lambda.Body); if (replacer.ReplaceCounts.Skip(skip).All(n => n > 0)) { return(lambda); } return(Expression.Lambda(lambda.Body, lambda.Parameters.Where((_, i) => i < skip || replacer.ReplaceCounts[i] > 0))); }
public static Expression Apply(this LambdaExpression lambda, params Expression[] exps) { var replacer = new ParameterExpressionReplacer(lambda.Parameters, exps); var result = replacer.Visit(lambda.Body); if (replacer.ReplaceCounts.Max() <= 1 || !exps.Any(IsComplex)) { return(result); } return(Expression.Invoke(lambda, exps)); }
public static Expression Apply(this LambdaExpression lambda, params Expression[] exps) { var replacer = new ParameterExpressionReplacer(lambda.Parameters, exps); return(replacer.Visit(lambda.Body)); }