private static DataSourceResult GetUngroupedDataSourceResult <TModel, TData>(this DataSourceRequest request, IQueryable <TData> query, IMapper mapper, bool getAggregates, ICollection <Expression <Func <IQueryable <TModel>, IIncludableQueryable <TModel, object> > > > includeProperties = null) where TModel : BaseModel where TData : BaseData { Expression <Func <IQueryable <TModel>, AggregateFunctionsGroup> > aggregatesExp = getAggregates ? QueryableExtensionsEx.CreateAggregatesExpression <TModel>(request) : null; Expression <Func <IQueryable <TModel>, int> > totalExp = QueryableExtensionsEx.CreateTotalExpression <TModel>(request); Expression <Func <IQueryable <TModel>, IEnumerable <TModel> > > ungroupedExp = QueryableExtensionsEx.CreateUngroupedDataExpression <TModel>(request); return(new DataSourceResult { Data = query.Query <TModel, TData, IEnumerable <TModel>, IEnumerable <TData> >(mapper, ungroupedExp, includeProperties), AggregateResults = getAggregates ? query.Query <TModel, TData, AggregateFunctionsGroup, AggregateFunctionsGroup, AggregateFunctionsGroupModel <TModel> >(mapper, aggregatesExp, includeProperties) ?.GetAggregateResults(request.Aggregates.SelectMany(a => a.Aggregates)) : null, Total = query.Query <TModel, TData, int, int>(mapper, totalExp, includeProperties) }); }
private static async Task <DataSourceResult> GetGroupedDataSourceResult <TModel, TData>(this DataSourceRequest request, IContextRepository contextRepository, bool getAggregates, SelectExpandDefinition selectExpandDefinition = null, ICollection <Expression <Func <IQueryable <TModel>, IIncludableQueryable <TModel, object> > > > includeProperties = null) where TModel : BaseModel where TData : BaseData { Expression <Func <IQueryable <TModel>, AggregateFunctionsGroup> > aggregatesExp = getAggregates ? QueryableExtensionsEx.CreateAggregatesExpression <TModel>(request) : null; Expression <Func <IQueryable <TModel>, int> > totalExp = QueryableExtensionsEx.CreateTotalExpression <TModel>(request); Expression <Func <IQueryable <TModel>, IEnumerable <AggregateFunctionsGroup> > > groupedExp = QueryableExtensionsEx.CreateGroupedDataExpression <TModel>(request); return(new DataSourceResult { Data = await contextRepository.QueryAsync <TModel, TData, IEnumerable <AggregateFunctionsGroup>, IEnumerable <AggregateFunctionsGroup>, IEnumerable <AggregateFunctionsGroupModel <TModel> > >(groupedExp, selectExpandDefinition, includeProperties), AggregateResults = getAggregates ? (await contextRepository.QueryAsync <TModel, TData, AggregateFunctionsGroup, AggregateFunctionsGroup, AggregateFunctionsGroupModel <TModel> >(aggregatesExp, selectExpandDefinition)) ?.GetAggregateResults(request.Aggregates.SelectMany(a => a.Aggregates)) : null, Total = await contextRepository.QueryAsync <TModel, TData, int, int>(totalExp, selectExpandDefinition) }); }