示例#1
0
        public static IActivationExpression CompileFilterExpression(FilterElement element, IEnumerable <Declaration> declarations)
        {
            var optimizer           = new ExpressionMultiParameterOptimizer <Func <object[], object> >();
            var optimizedExpression = optimizer.CompactParameters(element.Expression, 0);
            var @delegate           = optimizedExpression.Compile();
            var fastDelegate        = Create(@delegate, element.Expression.Parameters.Count);
            var factMap             = IndexMap.CreateMap(element.Imports, declarations);
            var expression          = new ActivationExpression(element.Expression, fastDelegate, factMap);

            return(expression);
        }
示例#2
0
        public IActivationExpression <TResult> CompileActivationExpression <TResult>(ExpressionElement element,
                                                                                     List <Declaration> declarations, IndexMap tupleFactMap)
        {
            var activationFactMap   = IndexMap.CreateMap(element.Imports, declarations);
            var factMap             = IndexMap.Compose(tupleFactMap, activationFactMap);
            var optimizedExpression = ExpressionOptimizer.Optimize <Func <Tuple, TResult> >(
                element.Expression, factMap, tupleInput: true, factInput: false);
            var @delegate   = ExpressionCompiler.Compile(optimizedExpression);
            var argumentMap = new ArgumentMap(factMap, element.Expression.Parameters.Count);
            var expression  = new ActivationExpression <TResult>(element.Expression, @delegate, argumentMap);

            return(expression);
        }