示例#1
0
        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);
        }
示例#2
0
        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);
        }