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)); }
public override async Task <ResultTable> ExecuteQueryAsync(QueryRequest request, CancellationToken cancellationToken) { request.Columns.Insert(0, new _EntityColumn(EntityColumnFactory().BuildColumnDescription(), QueryName)); DEnumerableCount <T> manualResult = await Execute(request, GetQueryDescription(), cancellationToken); return(manualResult.ToResultTable(request)); }