示例#1
0
        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());
        }
示例#2
0
        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());
        }