Exemple #1
0
        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));
        }
Exemple #2
0
        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));
        }
Exemple #4
0
        public static Expression Apply(this LambdaExpression lambda, params Expression[] exps)
        {
            var replacer = new ParameterExpressionReplacer(lambda.Parameters, exps);

            return(replacer.Visit(lambda.Body));
        }