public static LambdaExpression Demungify(LambdaExpression ex) { var visitor = new Demungifier(); var newBody = visitor.Visit(ex.Body); return(Expression.Lambda(newBody, ex.Parameters.Where(visitor.WasSeen))); }
public static LambdaExpression Demungify(LambdaExpression ex) { var visitor = new Demungifier(); var newBody = visitor.Visit(ex.Body); var args = ex.Parameters.Where(visitor.WasSeen).ToArray(); var lambda = Expression.Lambda(newBody, args); if (!args.Any() && !(lambda.Body is ConstantExpression)) { // evaluate that! object result = lambda.Compile().DynamicInvoke(); lambda = Expression.Lambda(Expression.Constant(result, newBody.Type)); } return(lambda); }