Example #1
0
        private IAggregatorFactory BuildAggregatorFactory(ReteBuilderContext context, AggregateElement element)
        {
            IAggregatorFactory factory;

            switch (element.Name)
            {
            case AggregateElement.CollectName:
                factory = new CollectionAggregatorFactory();
                break;

            case AggregateElement.GroupByName:
                factory = new GroupByAggregatorFactory();
                break;

            case AggregateElement.ProjectName:
                factory = new ProjectionAggregatorFactory();
                break;

            case AggregateElement.FlattenName:
                factory = new FlatteningAggregatorFactory();
                break;

            default:
                throw new ArgumentException(
                          $"Unrecognized aggregate element. Name={element.Name}");
            }
            var compiledExpressions = CompileExpressions(context, element);

            factory.Compile(element, compiledExpressions);
            return(factory);
        }
Example #2
0
        private IAggregatorFactory BuildAggregatorFactory(ReteBuilderContext context, AggregateElement element)
        {
            IAggregatorFactory factory;

            switch (element.Name)
            {
            case AggregateElement.CollectName:
                factory = new CollectionAggregatorFactory();
                break;

            case AggregateElement.GroupByName:
                factory = new GroupByAggregatorFactory();
                break;

            case AggregateElement.ProjectName:
                factory = new ProjectionAggregatorFactory();
                break;

            case AggregateElement.FlattenName:
                factory = new FlatteningAggregatorFactory();
                break;

            default:
                factory = GetCustomFactory(element);
                break;
            }
            var compiledExpressions = CompileExpressions(context, element);

            factory.Compile(element, compiledExpressions);
            return(factory);
        }
Example #3
0
        /// <summary>
        /// Configure projection aggregator.
        /// </summary>
        /// <param name="selector">Projection expression.</param>
        /// <typeparam name="TSource">Type of source elements to aggregate.</typeparam>
        /// <typeparam name="TResult">Type of result elements to aggregate.</typeparam>
        public void Project <TSource, TResult>(Expression <Func <TSource, TResult> > selector)
        {
            var aggregateFactory = new ProjectionAggregatorFactory <TSource, TResult>(selector.Compile());

            _expressions["Selector"] = selector;
            AggregatorFactory(ProjectName, aggregateFactory);
        }