async Task <IEnumerable <AggregatedModel <int, User> > > SelectUsersByReputationAsync(ReportOptions options) { // Get views by id for specified range var viewsById = options.FeatureId > 0 ? await _aggregatedUserReputationRepository.SelectSummedByIntAsync( "CreatedUserId", options.Start, options.End, options.FeatureId) : await _aggregatedUserReputationRepository.SelectSummedByIntAsync( "CreatedUserId", options.Start, options.End); // Get all entities matching ids IPagedResults <User> mostViewedEntities = null; if (viewsById != null) { mostViewedEntities = await _platoUserStore.QueryAsync() .Take(1, 100) .Select <UserQueryParams>(q => { q.Id.IsIn(viewsById.Data.Select(d => d.Aggregate).ToArray()); }) .OrderBy("CreatedDate", OrderBy.Desc) .ToList(); } // Build combined result List <AggregatedModel <int, User> > entityMetrics = null; if (mostViewedEntities?.Data != null) { foreach (var entity in mostViewedEntities.Data) { // Get or add aggregate var aggregate = viewsById?.Data.FirstOrDefault(m => m.Aggregate == entity.Id); if (aggregate != null) { if (entityMetrics == null) { entityMetrics = new List <AggregatedModel <int, User> >(); } entityMetrics.Add(new AggregatedModel <int, User>(aggregate, entity)); } } } return(entityMetrics?.OrderByDescending(o => o.Aggregate.Count) ?? null); }
async Task <IEnumerable <AggregatedModel <int, User> > > SelectUsersByReputationAsync(ReportOptions options) { // Get reputation for specified range var viewsById = options.FeatureId > 0 ? await _aggregatedUserReputationRepository.SelectSummedByIntAsync( "CreatedUserId", options.Start, options.End, options.FeatureId) : await _aggregatedUserReputationRepository.SelectSummedByIntAsync( "CreatedUserId", options.Start, options.End); // Get all users matching awarded rep IPagedResults <User> users = null; if (viewsById != null) { users = await _platoUserStore.QueryAsync() .Take(100, false) .Select <UserQueryParams>(q => { q.Id.IsIn(viewsById.Data.Select(d => d.Aggregate).ToArray()); }) .OrderBy("CreatedDate", OrderBy.Desc) .ToList(); } // Build total rep awarded and user List <AggregatedModel <int, User> > topUsers = null; if (users?.Data != null) { foreach (var entity in users.Data) { // Get or add aggregate var aggregate = viewsById?.Data.FirstOrDefault(m => m.Aggregate == entity.Id); if (aggregate != null) { if (topUsers == null) { topUsers = new List <AggregatedModel <int, User> >(); } topUsers.Add(new AggregatedModel <int, User>(aggregate, entity)); } } } return(topUsers?.OrderByDescending(o => o.Aggregate.Count) ?? null); }