private static Func <object, object[], DryvResult> CompileValidationExpression(this DryvRuleDefinition rule) { var lambdaExpression = rule.ValidationExpression; rule.EnsurePreevaluationOptionTypes(); var modelParameter = Expression.Parameter(typeof(object), "model"); var optionsParameter = Expression.Parameter(typeof(object[]), "options"); var invokeArguments = new List <Expression> { Expression.Convert(modelParameter, lambdaExpression.Parameters.First().Type) }; invokeArguments.AddOptionParameters(lambdaExpression, optionsParameter, 1); var invokeExpression = Expression.Invoke(lambdaExpression, invokeArguments); var resultLambda = Expression.Lambda <Func <object, object[], DryvResult> >(invokeExpression, modelParameter, optionsParameter); return(resultLambda.Compile()); }
private static Func <object[], bool> CompileEnablingExpression(this DryvRuleDefinition rule) { var lambdaExpression = rule.EnablingExpression; rule.EnsurePreevaluationOptionTypes(); var optionsParameter = Expression.Parameter(typeof(object[]), "options"); Expression <Func <object[], bool> > resultLambda; if (lambdaExpression != null) { var invokeArguments = new List <Expression>(); invokeArguments.AddOptionParameters(lambdaExpression, optionsParameter); var invokeExpression = Expression.Invoke(lambdaExpression, invokeArguments); resultLambda = Expression.Lambda <Func <object[], bool> >(invokeExpression, optionsParameter); } else { resultLambda = Expression.Lambda <Func <object[], bool> >(Expression.Constant(true), optionsParameter); } return(resultLambda.Compile()); }