Example #1
0
        private T ExecuteSeedAggregate <T>(QueryModel queryModel, AggregateFromSeedResultOperator seedAggregate)
        {
            var projector = ProjectorBuildingExpressionTreeVisitor <T> .BuildAggregateProjector(queryModel, seedAggregate.Func);

            var resultItems = LoadData(queryModel);
            var result      = seedAggregate.GetConstantSeed <T>();

            foreach (var item in resultItems)
            {
                result = projector(item)(result);
            }
            return(result);
        }
Example #2
0
        private T ExecuteAggregate <T>(QueryModel queryModel, AggregateResultOperator aggregate)
        {
            var valueProjector = ProjectorBuildingExpressionTreeVisitor <T> .BuildProjector(queryModel);

            var funcProjector = ProjectorBuildingExpressionTreeVisitor <T> .BuildAggregateProjector(queryModel, aggregate.Func);

            var resultItems = LoadData(queryModel);

            if (resultItems.Count == 0)
            {
                throw new DataException("For aggregate operation at least one result must be used");
            }
            var result = valueProjector(resultItems[0]);

            foreach (var item in resultItems.Skip(1))
            {
                result = funcProjector(item)(result);
            }
            return(result);
        }