private void MergeAggregateTypes(DataSourceRequest request) { if (Aggregates.Any()) { foreach (var requestAggregate in request.Aggregates) { var match = Aggregates.SingleOrDefault(agg => agg.Member.Equals(requestAggregate.Member, StringComparison.InvariantCultureIgnoreCase)); if (match != null) { requestAggregate.Aggregates.Each(function => { var innerFunction = match.Aggregates.SingleOrDefault(matchFunction => matchFunction.AggregateMethodName == function.AggregateMethodName); if (innerFunction != null && innerFunction.MemberType != null) { function.MemberType = innerFunction.MemberType; } }); } } } }
public void Process(DataSourceRequest request, bool processData) { RawData = Data; if (request.Sorts == null) { request.Sorts = OrderBy; } else if (request.Sorts.Any()) { OrderBy.Clear(); OrderBy.AddRange(request.Sorts); } else { OrderBy.Clear(); } if (request.PageSize == 0) { request.PageSize = PageSize; } PageSize = request.PageSize; if (request.Groups == null) { request.Groups = Groups; } else if (request.Groups.Any()) { Groups.Clear(); Groups.AddRange(request.Groups); } else { Groups.Clear(); } if (request.Filters == null) { request.Filters = Filters; } else if (request.Filters.Any()) { Filters.Clear(); Filters.AddRange(request.Filters); } else { Filters.Clear(); } if (!request.Aggregates.Any()) { request.Aggregates = Aggregates; } else if (request.Aggregates.Any()) { MergeAggregateTypes(request); Aggregates.Clear(); Aggregates.AddRange(request.Aggregates); } else { Aggregates.Clear(); } if (Groups.Any() && Aggregates.Any() && Data == null) { Groups.Each(g => g.AggregateFunctions.AddRange(Aggregates.SelectMany(a => a.Aggregates))); } if (Data != null) { if (processData) { var result = Data.AsQueryable().ToDataSourceResult(request); Data = result.Data; Total = result.Total; AggregateResults = result.AggregateResults; } else { var wrapper = Data as IGridCustomGroupingWrapper; if (wrapper != null) { RawData = Data = wrapper.GroupedEnumerable.AsGenericEnumerable(); } } } Page = request.Page; if (Total == 0 || PageSize == 0) { TotalPages = 1; } else { TotalPages = (Total + PageSize - 1) / PageSize; } }