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));
    }