public override IEnumerator <SortOrderModel> GetEnumerator() { foreach (var src in RankCaches) { var prob = new ProblemStatisticsModel[Problems.Count]; for (int i = 0; i < Problems.Count; i++) { prob[i] = new ProblemStatisticsModel(); } var teams = new List <TeamModel>(); int rank = 0, last_rank = 0; (int point, int penalty, int lastac)last = (int.MinValue, int.MinValue, int.MinValue); foreach (var item in src) { if (!Affiliations.ContainsKey(item.AffiliationId) || !Categories.ContainsKey(item.CategoryId) || !(FilteredAffiliations?.Contains(item.AffiliationId) ?? true) || !(FilteredCategories?.Contains(item.CategoryId) ?? true) || (!Categories[item.CategoryId].IsPublic && !ShowHiddenCategories)) { continue; } var team = CreateTeamViewModel( item, Affiliations[item.AffiliationId], Categories[item.CategoryId], IsPublic, prob); rank++; var now = (team.Points, team.Penalty, team.LastAc); if (last != now) { (last_rank, last) = (rank, now); } team.ContestId = IsPublic ? default(int?) : ContestId; team.Rank = last_rank; team.ShowRank = last_rank == rank; teams.Add(team); } if (teams.Count == 0) { continue; } yield return(new SortOrderModel(teams, prob)); } }