public TabelaCampeonatoEquipes GetTabelaCampeonatoEquipes(int temporada, int?corridaOrder) { var corridas = CorridasService.GetCorridasTabela(temporada); var equipes = EquipesService.ObterEquipesTabela(temporada); var resultados = ResultadosService.GetResultadosEquipeTemporada(temporada); PreencherResultadosEquipesCorridas(corridas, equipes, resultados); if (corridaOrder == null) { equipes.Sort((o, i) => o.Posicao.CompareTo(i.Posicao)); } else { equipes.Sort((o, i) => i.Resultados.FirstOrDefault(c => c.CorridaId == corridaOrder.Value) == null ? 0 : i.Resultados.FirstOrDefault(c => c.CorridaId == corridaOrder.Value).Pontos .CompareTo( o.Resultados.FirstOrDefault(c => c.CorridaId == corridaOrder.Value) == null ? 0 : o.Resultados.FirstOrDefault(c => c.CorridaId == corridaOrder.Value).Pontos )); } int pontosRestantes = CalcularPontosRestantes(corridas); MarcarEquipesPosicaoMaxima(equipes, pontosRestantes); return(new TabelaCampeonatoEquipes(corridas, equipes)); }
public void CalcularEquipesTemporada(int temporada) { var resultados = _resultadosService.GetResultadosEquipeTemporada(temporada); var equipesIds = resultados.GroupBy(o => o.EquipeId).Select(o => o.Key).ToList(); var equipesTemporada = new List <EquipeTemporadaInclusao>(); foreach (var equipeId in equipesIds) { var pontos = resultados.Where(o => o.EquipeId == equipeId).Sum(o => o.Pontos); equipesTemporada.Add(new EquipeTemporadaInclusao(equipeId, temporada, pontos, 0)); } equipesTemporada.Sort((o, i) => i.Pontos != o.Pontos ? i.Pontos.CompareTo(o.Pontos) : CompararEquipes(i.EquipeId, o.EquipeId, resultados)); equipesTemporada.ForEach(o => o.Posicao = equipesTemporada.IndexOf(o) + 1); foreach (var equipeTemporada in equipesTemporada) { AddOrUpdate(equipeTemporada); } }