aggregates on all completed :)
This commit is contained in:
parent
94d241590e
commit
d598508ab2
@ -83,8 +83,8 @@ namespace PoweredSoft.DynamicQuery.Cli
|
|||||||
|
|
||||||
criteria.Groups = new List<IGroup>()
|
criteria.Groups = new List<IGroup>()
|
||||||
{
|
{
|
||||||
new Group { Path = "LastName" },
|
new Group { Path = "LastName" }
|
||||||
new Group { Path = "Sexe" }
|
//, new Group { Path = "Sexe" }
|
||||||
};
|
};
|
||||||
|
|
||||||
criteria.Aggregates = new List<IAggregate>()
|
criteria.Aggregates = new List<IAggregate>()
|
||||||
|
@ -25,7 +25,11 @@ namespace PoweredSoft.DynamicQuery
|
|||||||
protected virtual IQueryExecutionResult ExecuteGrouping<T>()
|
protected virtual IQueryExecutionResult ExecuteGrouping<T>()
|
||||||
{
|
{
|
||||||
var result = new QueryExecutionResult();
|
var result = new QueryExecutionResult();
|
||||||
result.TotalRecords = CurrentQueryable.LongCount();
|
|
||||||
|
// preserve queryable.
|
||||||
|
var queryableAfterFilters = CurrentQueryable;
|
||||||
|
|
||||||
|
result.TotalRecords = queryableAfterFilters.LongCount();
|
||||||
CalculatePageCount(result);
|
CalculatePageCount(result);
|
||||||
|
|
||||||
// intercept groups in advance to avoid doing it more than once :)
|
// intercept groups in advance to avoid doing it more than once :)
|
||||||
@ -64,8 +68,6 @@ namespace PoweredSoft.DynamicQuery
|
|||||||
cgrr.GroupPath = g.Path;
|
cgrr.GroupPath = g.Path;
|
||||||
cgrr.GroupValue = groupRecord.GetDynamicPropertyValue($"Key_{gi}");
|
cgrr.GroupValue = groupRecord.GetDynamicPropertyValue($"Key_{gi}");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!isLast)
|
if (!isLast)
|
||||||
cgrr.Data = new List<object>();
|
cgrr.Data = new List<object>();
|
||||||
else
|
else
|
||||||
@ -100,9 +102,39 @@ namespace PoweredSoft.DynamicQuery
|
|||||||
return (object)groupRecordResult;
|
return (object)groupRecordResult;
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
|
result.Aggregates = CalculateTotalAggregate(queryableAfterFilters);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual List<IAggregateResult> CalculateTotalAggregate(IQueryable queryableAfterFilters)
|
||||||
|
{
|
||||||
|
if (!Criteria.Aggregates.Any())
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var groupExpression = queryableAfterFilters.EmptyGroupBy(QueryableUnderlyingType);
|
||||||
|
var selectExpression = groupExpression.Select(sb =>
|
||||||
|
{
|
||||||
|
Criteria.Aggregates.ForEach((a, index) =>
|
||||||
|
{
|
||||||
|
var selectType = ResolveSelectFrom(a.Type);
|
||||||
|
sb.Aggregate(a.Path, selectType, $"Agg_{index}");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var aggregateResult = selectExpression.ToDynamicClassList().First();
|
||||||
|
var ret = new List<IAggregateResult>();
|
||||||
|
Criteria.Aggregates.ForEach((a, index) =>
|
||||||
|
{
|
||||||
|
ret.Add(new AggregateResult()
|
||||||
|
{
|
||||||
|
Path = a.Path,
|
||||||
|
Type = a.Type,
|
||||||
|
Value = aggregateResult.GetDynamicPropertyValue($"Agg_{index}")
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
private DynamicClass FindMatchingAggregateResult(List<List<DynamicClass>> aggregateResults, List<IGroup> groups, List<GroupQueryResult> groupResults)
|
private DynamicClass FindMatchingAggregateResult(List<List<DynamicClass>> aggregateResults, List<IGroup> groups, List<GroupQueryResult> groupResults)
|
||||||
{
|
{
|
||||||
var groupIndex = groupResults.Count - 1;
|
var groupIndex = groupResults.Count - 1;
|
||||||
@ -159,8 +191,11 @@ namespace PoweredSoft.DynamicQuery
|
|||||||
{
|
{
|
||||||
var result = new QueryExecutionResult();
|
var result = new QueryExecutionResult();
|
||||||
|
|
||||||
|
// after filter queryable
|
||||||
|
var afterFilterQueryable = CurrentQueryable;
|
||||||
|
|
||||||
// total records.
|
// total records.
|
||||||
result.TotalRecords = CurrentQueryable.LongCount();
|
result.TotalRecords = afterFilterQueryable.LongCount();
|
||||||
CalculatePageCount(result);
|
CalculatePageCount(result);
|
||||||
|
|
||||||
// sorts and paging.
|
// sorts and paging.
|
||||||
@ -169,7 +204,7 @@ namespace PoweredSoft.DynamicQuery
|
|||||||
|
|
||||||
// the data.
|
// the data.
|
||||||
result.Data = CurrentQueryable.ToObjectList();
|
result.Data = CurrentQueryable.ToObjectList();
|
||||||
|
result.Aggregates = CalculateTotalAggregate(afterFilterQueryable);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user