Ejemplo n.º 1
0
        public override async Task <ResultTable> ExecuteQueryGroupAsync(QueryRequest request, CancellationToken cancellationToken)
        {
            var simpleFilters    = request.Filters.Where(f => !f.IsAggregate()).ToList();
            var aggregateFilters = request.Filters.Where(f => f.IsAggregate()).ToList();

            var keys = request.Columns.Select(t => t.Token).Where(t => !(t is AggregateToken)).ToHashSet();

            var allAggregates = request.AllTokens().OfType <AggregateToken>().ToHashSet();

            var qr = new QueryRequest
            {
                Columns    = keys.Concat(allAggregates.Select(at => at.Parent).NotNull()).Distinct().Select(t => new Column(t, t.NiceName())).ToList(),
                Orders     = new List <Order>(),
                Filters    = simpleFilters,
                QueryName  = request.QueryName,
                Pagination = new Pagination.All(),
            };

            DEnumerableCount <T> plainCollection = await Execute(qr, GetQueryDescription(), cancellationToken);

            var groupCollection = plainCollection
                                  .GroupBy(keys, allAggregates)
                                  .Where(aggregateFilters)
                                  .OrderBy(request.Orders);

            var cols = groupCollection.TryPaginate(request.Pagination);

            return(cols.ToResultTable(request));
        }
Ejemplo n.º 2
0
        public override ResultTable ExecuteQueryGroup(QueryGroupRequest request)
        {
            var simpleFilters    = request.Filters.Where(f => !(f.Token is AggregateToken)).ToList();
            var aggregateFilters = request.Filters.Where(f => f.Token is AggregateToken).ToList();

            var keys = request.Columns.Select(t => t.Token).Where(t => !(t is AggregateToken)).ToHashSet();

            var allAggregates = request.AllTokens().OfType <AggregateToken>().ToHashSet();

            DEnumerableCount <T> plainCollection = Execute(new QueryRequest
            {
                Columns    = keys.Concat(allAggregates.Select(at => at.Parent).NotNull()).Distinct().Select(t => new Column(t, t.NiceName())).ToList(),
                Orders     = new List <Order>(),
                Filters    = simpleFilters,
                QueryName  = request.QueryName,
                Pagination = new Pagination.All(),
            }, GetQueryDescription());

            var groupCollection = plainCollection
                                  .GroupBy(keys, allAggregates)
                                  .Where(aggregateFilters)
                                  .OrderBy(request.Orders);

            var cols = request.Columns
                       .Select(column => (column, Expression.Lambda(column.Token.BuildExpression(groupCollection.Context), groupCollection.Context.Parameter))).ToList();

            var values = groupCollection.Collection.ToArray();

            return(values.ToResultTable(cols, values.Length, new Pagination.All()));
        }