public async Task RecalculateLeagueStandingsAsync(int leagueId) { var league = await GetAndValidateItem(leagueId); var teams = LeagueRepository.GetTeamLeagueAssignments() .Where(tla => tla.LeagueId == leagueId) .Select(tla => tla.TeamId); var currentStandings = new List <TeamTableStanding>(); foreach (var teamId in teams) { var playedMatches = MatchRepository.GetItems() .Where(m => m.LeagueId == league.Id && (m.Team1Id == teamId || m.Team2Id == teamId) && m.Date < DateTime.Now); var tableStanding = new TeamTableStanding() { LeagueId = leagueId, TeamId = teamId }; foreach (var match in playedMatches) { tableStanding.ApplyMatch(match); } currentStandings.Add(tableStanding); } LeagueTableSorter.CalculateTeamPositions(currentStandings); var oldStandings = LeagueRepository.GetStandings() .Where(tts => tts.LeagueId == leagueId); await LeagueRepository.RemoveTeamStandingsAsync(oldStandings); await LeagueRepository.AddTeamStandingsAsync(currentStandings); }