public void CalcularPilotosTemporada(int temporada) { var resultados = _resultadosService.GetResultadosPilotosTemporada(temporada); var pilotosIds = resultados.GroupBy(o => o.PilotoId).Select(o => o.Key).ToList(); var pilotosTemporada = new List <PilotoTemporadaInclusao>(); foreach (var pilotoId in pilotosIds) { var pontos = resultados.Where(o => o.PilotoId == pilotoId).Sum(o => o.Pontos); pilotosTemporada.Add(new PilotoTemporadaInclusao(pilotoId, temporada, pontos, 0)); } pilotosTemporada.Sort((o, i) => i.Pontos != o.Pontos ? i.Pontos.CompareTo(o.Pontos) : CompararPilotos(i.PilotoId, o.PilotoId, resultados)); pilotosTemporada.ForEach(o => o.Posicao = pilotosTemporada.IndexOf(o) + 1); foreach (var pilotoTemporada in pilotosTemporada) { AddOrUpdate(pilotoTemporada); } }
public TabelaCampeonatoPilotos GetTabelaCampeonatoPilotos(int temporada, int?corridaOrder) { var corridas = CorridasService.GetCorridasTabela(temporada); var pilotos = PilotosService.ObterPilotosTabela(temporada); var resultados = ResultadosService.GetResultadosPilotosTemporada(temporada); PreencherResultadosPilotosCorridas(corridas, pilotos, resultados); if (corridaOrder == null) { pilotos.Sort((o, i) => o.Posicao.CompareTo(i.Posicao)); } else { pilotos.Sort((o, i) => o.Resultados.FirstOrDefault(c => c.CorridaId == corridaOrder.Value) == null ? 999 : o.Resultados.FirstOrDefault(c => c.CorridaId == corridaOrder.Value).PosicaoChegada .CompareTo( i.Resultados.FirstOrDefault(c => c.CorridaId == corridaOrder.Value) == null ? 999 : i.Resultados.FirstOrDefault(c => c.CorridaId == corridaOrder.Value).PosicaoChegada )); } var pontosRestantes = CalcularPontosRestantes(corridas); MarcarPilotosPosicaoMaxima(pilotos, pontosRestantes); return(new TabelaCampeonatoPilotos(corridas, pilotos)); }