public async Task <Func <TResult> > ToLambdaAsync <TResult>() { if (HasErrors()) { throw new EvaluationException(Error); } if (ParsedExpression == null) { ParsedExpression = Compile(OriginalExpression, (Options & EvaluateOptions.NoCache) == EvaluateOptions.NoCache); } var visitor = new LambdaExpressionVistor(Parameters, Options); await ParsedExpression.AcceptAsync(visitor); var body = visitor.Result; if (body.Type != typeof(TResult)) { body = System.Linq.Expressions.Expression.Convert(body, typeof(TResult)); } var lambda = System.Linq.Expressions.Expression.Lambda <Func <TResult> >(body); return(lambda.Compile()); }
public Func <TContext, TResult> ToLambda <TContext, TResult>() where TContext : class { if (HasErrors()) { throw new EvaluationException(Error, ErrorException); } if (ParsedExpression == null) { ParsedExpression = Compile(OriginalExpression, (Options & EvaluateOptions.NoCache) == EvaluateOptions.NoCache); } var parameter = System.Linq.Expressions.Expression.Parameter(typeof(TContext), "ctx"); var visitor = new LambdaExpressionVistor(parameter, Options); ParsedExpression.Accept(visitor); var body = visitor.Result; if (body.Type != typeof(TResult)) { body = System.Linq.Expressions.Expression.Convert(body, typeof(TResult)); } var lambda = System.Linq.Expressions.Expression.Lambda <Func <TContext, TResult> >(body, parameter); return(lambda.Compile()); }
public Func <TContext, TResult> ToLambda <TContext, TResult>() { if (HasErrors()) { throw new EvaluationException(Error, ErrorException); } if (ParsedExpression == null) { ParsedExpression = Compile(OriginalExpression, (Options & EvaluateOptions.NoCache) == EvaluateOptions.NoCache); } var parameter = FastExpressionCompiler.LightExpression.Expression.Parameter(typeof(TContext), "ctx"); var visitor = new LambdaExpressionVistor(parameter, Options); visitor.EvaluateFunction += EvaluateFunction; visitor.EvaluateParameter += EvaluateParameter; visitor.Parameters = Parameters; ParsedExpression.Accept(visitor); var body = visitor.Result; if (body.Type != typeof(TResult)) { body = FastExpressionCompiler.LightExpression.Expression.Convert(body, typeof(TResult)); } var lambda = FastExpressionCompiler.LightExpression.Expression .Lambda <Func <TContext, TResult> >(body, parameter); return(lambda.CompileFast()); }