public static List <MatchInfo> getMatchesInfo() { if (matchesInfo.Count == 0) { var matches = db.Matches.ToList(); var teams = db.Teams.ToList(); List <Team> teamsToUpdate = new List <Team>(); List <TeamInfo> teamesInfo = new List <TeamInfo>(); foreach (var match in matches) { Team firstTeamFromDb = teams.Where(t => t.Id == match.FirstTeamId).ToList()[0]; Team secondTeamFromDb = teams.Where(t => t.Id == match.SecondTeamId).ToList()[0]; match.FirstTeam = firstTeamFromDb; match.SecondTeam = secondTeamFromDb; TeamInfo firstTeam = new TeamInfo(match.FirstTeam); TeamInfo secondTeam = new TeamInfo(match.SecondTeam); if (firstTeam.fuzzyInfo[0] == '-') { firstTeam.fuzzyInfo = FuzzyPredictor.analizeTeamInfo(firstTeam.getListOfParameters()); firstTeamFromDb.FuzzyInfo = firstTeam.fuzzyInfo; teamsToUpdate.Add(firstTeamFromDb); } if (secondTeam.fuzzyInfo[0] == '-') { secondTeam.fuzzyInfo = FuzzyPredictor.analizeTeamInfo(secondTeam.getListOfParameters()); secondTeamFromDb.FuzzyInfo = secondTeam.fuzzyInfo; teamsToUpdate.Add(secondTeamFromDb); } MatchInfo matchInfo = new MatchInfo(match, firstTeam, secondTeam); matchesInfo.Add(matchInfo); } if (teamsToUpdate.Count > 0) { updateTeamsTable(teamsToUpdate); } } return(matchesInfo); }