Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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));
        }