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); }
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() })); }