Пример #1
0
        public IEnumerable <DisciplineResults> GetRankings(FilterType type, SortType sort, Gender?gender)
        {
            var averageResultComparer = new Result.Comparer(Result.Comparer.Mode.Average);
            var singleResultComparer  = new Result.Comparer(Result.Comparer.Mode.Single);

            var results = _resultsRepository.GetResults(filter: (null, null), readDiscipline: true, readMeeting: true, readUser: true);

            if (gender != null)
            {
                results = results.Where(r => r.User.Gender == gender);
            }

            var disciplineResults = GroupResultsByDiscipline(results)
                                    .Select(dr =>
            {
                var orderedResults = dr.Results
                                     .OrderBy(r => r, type == FilterType.Average ? averageResultComparer : singleResultComparer)
                                     .Distinct(new ResultUserEqualityComparer());
                if (sort == SortType.Descending)
                {
                    orderedResults = orderedResults.Reverse();
                }

                return(new DisciplineResults
                {
                    Discipline = dr.Discipline,
                    Results = orderedResults
                });
            });

            return(disciplineResults);
        }
Пример #2
0
        public IEnumerable <DisciplineRecord> GetUserRecords(int userId)
        {
            var averageResultComparer = new Result.Comparer(Result.Comparer.Mode.Average);
            var singleResultComparer  = new Result.Comparer(Result.Comparer.Mode.Single);

            var results = _resultsRepository.GetResults(filter: (null, userId), readDiscipline: true, readMeeting: true);

            return(GroupResultsByDiscipline(results)
                   .Select(dr => new DisciplineRecord
            {
                Discipline = dr.Discipline,
                BestSingleResult = dr.Results.OrderBy(r => r, singleResultComparer).FirstOrDefault(),
                BestAverageResult = dr.Results.OrderBy(r => r, averageResultComparer).FirstOrDefault()
            }));
        }