private FixtureRating SetupFixtureRating(Fixture fixture) { FixtureRating fixtureRating = new FixtureRating(fixture); fixtureRating.HomeSuperiority = GetSuperiority(fixture.HomeTeam, true); fixtureRating.AwaySuperiority = GetSuperiority(fixture.AwayTeam, false); var matchedResults = analysis.Where(x => x.Division == fixture.Division && x.MatchRating == fixtureRating.MatchRating).ToList(); var previousResults = analysis.Where(x => x.HomeTeam == fixture.HomeTeam && x.AwayTeam == fixture.AwayTeam && x.Date <fixture.Date && x.Date> fixture.Date.AddYears(-5)).OrderByDescending(x => x.Date).Take(5).ToList(); matchedResults.AddRange(previousResults); matchedResults.AddRange(previousResults); matchedResults.AddRange(previousResults); if (matchedResults.Count > 0) { fixtureRating.HomePercent = decimal.Divide(matchedResults.Where(x => x.Actual == "H").Count(), matchedResults.Count); fixtureRating.DrawPercent = decimal.Divide(matchedResults.Where(x => x.Actual == "D").Count(), matchedResults.Count); fixtureRating.AwayPercent = decimal.Divide(matchedResults.Where(x => x.Actual == "A").Count(), matchedResults.Count); fixtureRating.BothTeamsScoreYesPercent = decimal.Divide(matchedResults.Where(x => x.BothTeamsScored).Count(), matchedResults.Count); fixtureRating.BothTeamsScoreNoPercent = decimal.Divide(matchedResults.Where(x => !x.BothTeamsScored).Count(), matchedResults.Count); fixtureRating.TwoGoalsYesPercent = decimal.Divide(matchedResults.Where(x => x.TwoGoals).Count(), matchedResults.Count); fixtureRating.TwoGoalsNoPercent = decimal.Divide(matchedResults.Where(x => !x.TwoGoals).Count(), matchedResults.Count); fixtureRating.ThreeGoalsYesPercent = decimal.Divide(matchedResults.Where(x => x.ThreeGoals).Count(), matchedResults.Count); fixtureRating.ThreeGoalsNoPercent = decimal.Divide(matchedResults.Where(x => !x.ThreeGoals).Count(), matchedResults.Count); } fixtureRating.Valid = matchedResults.Count > validThreshold ? true : false; if (test) { fixtureRating.Actual = fixture.Actual; fixtureRating.ActualBTTS = fixture.ActualBTTS; fixtureRating.ActualTwoGoals = fixture.ActualTwoGoals; fixtureRating.ActualThreeGoals = fixture.ActualThreeGoals; } return(fixtureRating); }
public List <FixtureRating> Calculate(bool test = false, bool reset = false) { try { this.test = test; if (reset) { DeleteAnalysis(); RunAnalysis(); } List <FixtureRating> fixtureRatings = new List <FixtureRating>(); if (!test) { var current = DateTime.Now.Date; fixtures = db.Fixtures.AsNoTracking().Where(x => x.Date >= current).OrderBy(x => x.Date).ThenBy(x => x.Division).ThenBy(x => x.HomeTeam).ToList(); } else { SetupTestFixtures(); } analysis = db.Datasets.AsNoTracking().ToList(); for (int i = 0; i < fixtures.Count; i++) { FixtureRating fixtureRating = SetupFixtureRating(fixtures[i]); fixtureRatings.Add(fixtureRating); } return(fixtureRatings); } catch (Exception ex) { log.Error("Error calculating fixtures", ex); throw; } }