Exemple #1
0
        public PlayerStint SelectRandomBatter(PositionType positionType, bool starter = false, bool hallOfFamer = false, bool allStar = false)
        {
            var random = new Random();
            var year   = random.Next(1873, 2020);

            string position;

            if (positionType == PositionType.DesignatedHitter)
            {
                var pos = random.Next(2, 10);
                position = PositionTypeHelperFunctions.NumberToPositionAbbreviationString(pos);
            }
            else if (positionType == PositionType.CornerInfielder)
            {
                var pos = random.Next(0, 2);
                position = pos == 0 ? "1B" : "3B";
            }
            else if (positionType == PositionType.MiddleInfielder)
            {
                var pos = random.Next(0, 2);
                position = pos == 0 ? "2B" : "SS";
            }
            else if (positionType == PositionType.OutFielder)
            {
                var pos = random.Next(7, 10);
                position = PositionTypeHelperFunctions.NumberToPositionAbbreviationString(pos);
            }
            else
            {
                position = PositionTypeHelperFunctions.PositionTypeToPositionAbbreviationString(positionType);
            }

            if (year < 1954 && (position == "LF" || position == "CF" || position == "RF"))
            {
                position = "OF";
            }

            var minimumGamesPlayed = starter ? 80 : 20;
            var minimumAtBats      = 20;

            if (hallOfFamer)
            {
                return(BattingStintRepository.GetRandomHallOfFameBattingStintByPositionMinimumGamesPlayedAndMinimumAtBats(position, minimumGamesPlayed, minimumAtBats));
            }
            if (allStar)
            {
                return(BattingStintRepository.GetRandomAllStarBattingStintByPositionMinimumGamesPlayedAndMinimumAtBats(position, minimumGamesPlayed, minimumAtBats));
            }

            var batter = BattingStintRepository.GetRandomBattingStintByPositionYearMinimumGamesPlayedAndMinimumAtBats(position, year, minimumGamesPlayed, minimumAtBats);

            while (batter == null)
            {
                year   = random.Next(1873, 2020);
                batter = BattingStintRepository.GetRandomBattingStintByPositionYearMinimumGamesPlayedAndMinimumAtBats(position, year, minimumGamesPlayed, minimumAtBats);
            }
            return(batter);
        }
        public Team GetHistoricalFranchiseAllTimePlayers(int franchiseId)
        {
            var playerStints = new List <PlayerStint>();
            var dhPool       = new List <PlayerStint>();
            var catchers     = BattingStintRepository.GetBestOPSBattingStintsByPositionFranchiseMinimumGamesPlayedAndMinimumAtBats(3, "C", franchiseId, 80, 350);

            playerStints.Add(catchers.First());
            dhPool.Add(catchers.Skip(1).First());
            var firstBasemen = BattingStintRepository.GetBestOPSBattingStintsByPositionFranchiseMinimumGamesPlayedAndMinimumAtBats(3, "1B", franchiseId, 80, 350);

            playerStints.Add(firstBasemen.First());
            dhPool.Add(firstBasemen.Skip(1).First());
            var secondBasemen = BattingStintRepository.GetBestOPSBattingStintsByPositionFranchiseMinimumGamesPlayedAndMinimumAtBats(3, "2B", franchiseId, 80, 350);

            playerStints.Add(secondBasemen.First());
            dhPool.Add(secondBasemen.Skip(1).First());
            var thirdBasemen = BattingStintRepository.GetBestOPSBattingStintsByPositionFranchiseMinimumGamesPlayedAndMinimumAtBats(3, "3B", franchiseId, 80, 350);

            playerStints.Add(thirdBasemen.First());
            dhPool.Add(thirdBasemen.Skip(1).First());
            var shortstops = BattingStintRepository.GetBestOPSBattingStintsByPositionFranchiseMinimumGamesPlayedAndMinimumAtBats(3, "SS", franchiseId, 80, 350);

            playerStints.Add(shortstops.First());
            dhPool.Add(shortstops.Skip(1).First());
            var middleInfielders      = secondBasemen.Concat(shortstops);
            var cornerInfielders      = firstBasemen.Concat(thirdBasemen);
            var noPositionOutFielders = BattingStintRepository.GetBestOPSBattingStintsByPositionFranchiseMinimumGamesPlayedAndMinimumAtBats(5, "OF", franchiseId, 80, 350).ToList();
            var outFielders           = noPositionOutFielders.ToList();
            var leftFielders          = BattingStintRepository.GetBestOPSBattingStintsByPositionFranchiseMinimumGamesPlayedAndMinimumAtBats(3, "LF", franchiseId, 80, 350);
            var startingOutFielders   = leftFielders.Take(1).ToList();

            outFielders.AddRange(leftFielders);
            var centerFielders = BattingStintRepository.GetBestOPSBattingStintsByPositionFranchiseMinimumGamesPlayedAndMinimumAtBats(3, "CF", franchiseId, 80, 350);

            startingOutFielders.Add(centerFielders.First());
            outFielders.AddRange(centerFielders);
            var rightFielders = BattingStintRepository.GetBestOPSBattingStintsByPositionFranchiseMinimumGamesPlayedAndMinimumAtBats(3, "RF", franchiseId, 80, 350);

            startingOutFielders.Add(rightFielders.First());
            outFielders.AddRange(rightFielders);
            startingOutFielders   = startingOutFielders.OrderBy(o => o.BattingStint.OnBasePlusSlugging).ToList();
            noPositionOutFielders = noPositionOutFielders.Where(n => startingOutFielders.Select(s => s.BattingStint.PersonId).Contains(n.BattingStint.PersonId) == false).ToList();

            if (noPositionOutFielders.Any())
            {
                var count = noPositionOutFielders.Count < 3 ? noPositionOutFielders.Count : 3;
                for (var i = 0; i < count; i++)
                {
                    if (noPositionOutFielders.First().BattingStint.OnBasePlusSlugging > startingOutFielders[i].BattingStint.OnBasePlusSlugging)
                    {
                        startingOutFielders[i] = noPositionOutFielders.First();
                        noPositionOutFielders.RemoveAt(0);
                    }
                }
            }

            playerStints.AddRange(startingOutFielders);
            dhPool.Add(outFielders.Where(o => startingOutFielders.Select(s => s.BattingStint.PersonId).Contains(o.BattingStint.PersonId) == false).First());
            dhPool.AddRange(BattingStintRepository.GetBestOPSBattingStintsByFranchiseAndMinimumAtBats(9, franchiseId, 350));

            playerStints.Add(dhPool.Where(d => playerStints.Select(p => p.BattingStint.PersonId).Contains(d.BattingStint.PersonId) == false).OrderByDescending(d => d.BattingStint.OnBasePlusSlugging).First());
            playerStints.Add(catchers.Where(c => playerStints.Select(p => p.BattingStint.PersonId).Contains(c.BattingStint.PersonId) == false).OrderByDescending(d => d.BattingStint.OnBasePlusSlugging).First());
            playerStints.Add(cornerInfielders.Where(c => playerStints.Select(p => p.BattingStint.PersonId).Contains(c.BattingStint.PersonId) == false).OrderByDescending(d => d.BattingStint.OnBasePlusSlugging).First());
            playerStints.Add(middleInfielders.Where(m => playerStints.Select(p => p.BattingStint.PersonId).Contains(m.BattingStint.PersonId) == false).OrderByDescending(d => d.BattingStint.OnBasePlusSlugging).First());
            playerStints.Add(outFielders.Where(o => playerStints.Select(p => p.BattingStint.PersonId).Contains(o.BattingStint.PersonId) == false).OrderByDescending(d => d.BattingStint.OnBasePlusSlugging).First());

            var startingPitchers = PitchingStintRepository.GetBestPitchingStintsByPositionFranchiseMinimumGamesPlayedAndMinimumAtBats(5, franchiseId, 10, 300);

            playerStints.AddRange(startingPitchers);
            var reliefPitchers = PitchingStintRepository.GetBestPitchingStintsByPositionFranchiseMinimumGamesPlayedAndMinimumAtBats(12, franchiseId, 0, 120);

            playerStints.AddRange(reliefPitchers.Where(r => startingPitchers.Select(s => s.PitchingStint.PersonId).Contains(r.PitchingStint.PersonId) == false).Take(7));

            return(new Team {
                PlayerStints = playerStints
            });
        }