private IEnumerable <ConcurentResultDTO> GetConcurents(ConcurentModel model, IEnumerable <UserProfile> allStudents, Func <int, int, int> GetTotalRatingFunc, int divisionId) { List <ConcurentResultDTO> concurents = new List <ConcurentResultDTO>(); double total = GetTotalRatingFunc(model.StudentId, divisionId); if (model.SkipCount < 0) { foreach (var u in allStudents) { concurents.Add(new ConcurentResultDTO { UserProfile = u, RatingValue = GetTotalRatingFunc(u.Id, divisionId) }); } concurents = concurents.Where(c => c.RatingValue > total).OrderBy(c => c.RatingValue).Skip(Math.Abs(model.SkipCount + model.TakeCount)).Take(model.TakeCount).OrderByDescending(c => c.RatingValue).ToList(); } else { foreach (var u in allStudents) { concurents.Add(new ConcurentResultDTO { UserProfile = u, RatingValue = GetTotalRatingFunc(u.Id, divisionId) }); } concurents = concurents.Where(c => c.RatingValue <= total).OrderByDescending(c => c.RatingValue).Skip(model.SkipCount).Take(model.TakeCount).ToList(); } return(concurents.AsEnumerable()); }
public List <ConcurentResultDTO> SearchConcurents(ConcurentModel model) { if (model != null) { return(services.SearchService.SearchConcurents(model, services.StatisticService).ToList()); } return(null); }
public IEnumerable <ConcurentResultDTO> SearchConcurents(ConcurentModel model, IStatisticService statisticService) { IEnumerable <UserProfile> allStudents = Database.UserRepository.Find(u => u.UniversityId == model.UniversityId && (model.FacultyId != null ? u.FacultyId == model.FacultyId : true) && (model.CourseId != null ? u.CourseId == model.CourseId : true)); if (model.DisciplineBranchId == null) { if (model.StudentRatingType == StudentRatingType.Average) { return(GetConcurents(model, allStudents, (Func <int, int, double>)statisticService.GetAverageRatingByDivision, 1)); } else if (model.StudentRatingType == StudentRatingType.Overall) { return(GetConcurents(model, allStudents, (Func <int, int>)statisticService.GetTotalRating)); } else if (model.StudentRatingType == StudentRatingType.Olympiads) { return(GetConcurents(model, allStudents, (Func <int, int, int>)statisticService.GetTotalRatingByDivision, 2)); } } else if (model.DisciplineId == null) { if (model.StudentRatingType == StudentRatingType.Average) { return(GetConcurents(model, allStudents, (Func <int, int, int, double>)statisticService.GetAverageRatingByBranchDivision, 1)); } else if (model.StudentRatingType == StudentRatingType.Overall) { return(GetConcurents(model, allStudents, statisticService.GetTotalRatingByBranch)); } else if (model.StudentRatingType == StudentRatingType.Olympiads) { return(GetConcurents(model, allStudents, (Func <int, int, int, int>)statisticService.GetTotalRatingByBranchDivision, 2)); } } else { if (model.StudentRatingType == StudentRatingType.Average) { return(GetConcurents(model, allStudents, (Func <int, int, int, int, double>)statisticService.GetAverageRatingByBranchDisciplineDivision, 1)); } else if (model.StudentRatingType == StudentRatingType.Overall) { return(GetConcurents(model, allStudents, statisticService.GetTotalRatingByBranchDiscipline)); } else if (model.StudentRatingType == StudentRatingType.Olympiads) { return(GetConcurents(model, allStudents, (Func <int, int, int, int, int>)statisticService.GetTotalRatingByBranchDisciplineDivision, 2)); } } return(null); }