private Model.GenericPrediction ConvertAPIToGeneric(APIFootballPrediction apiPrediction, Tournament tournament, DateTime date, Uri predictionURL)
    {
      var tournamentEvent = this.fixtureRepository.GetTournamentEventFromTournamentAndDate(date, tournament.TournamentName);

      var footballPrediction = new Model.FootballPrediction()
      {
        TournamentName = tournament.TournamentName,
        TournamentEventName = tournamentEvent.EventName,
        TeamOrPlayerA = apiPrediction.HomeTeam,
        TeamOrPlayerB = apiPrediction.AwayTeam,
        MatchDate = date,
        MatchIdentifier = string.Format("{0}/vs/{1}/{2}/{3}", apiPrediction.HomeTeam, apiPrediction.AwayTeam,
          tournamentEvent.EventName, date.ToShortDateString().Replace("/", "-"))
      };

      footballPrediction.OutcomeProbabilities.Add(Model.Outcome.HomeWin, apiPrediction.ExpectedProbabilities.HomeWinProb);
      footballPrediction.OutcomeProbabilities.Add(Model.Outcome.Draw, apiPrediction.ExpectedProbabilities.DrawProb);
      footballPrediction.OutcomeProbabilities.Add(Model.Outcome.AwayWin, apiPrediction.ExpectedProbabilities.AwayWinProb);

      foreach (var scoreLine in apiPrediction.ScoreProbabilities)
      {
        var key = string.Format("{0}-{1}", scoreLine.HomeGoals.ToString(), scoreLine.AwayGoals.ToString());
        if (!footballPrediction.ScoreLineProbabilities.ContainsKey(key))
          footballPrediction.ScoreLineProbabilities.Add(key, scoreLine.Probability);
      }
      return footballPrediction;
    }
        private Model.GenericPrediction ConvertAPIToGeneric(APIFootballPrediction apiPrediction, Tournament tournament, DateTime date, Uri predictionURL)
        {
            var tournamentEvent = this.fixtureRepository.GetTournamentEventFromTournamentAndDate(date, tournament.TournamentName);

            var footballPrediction = new Model.FootballPrediction()
            {
                TournamentName      = tournament.TournamentName,
                TournamentEventName = tournamentEvent.EventName,
                TeamOrPlayerA       = apiPrediction.HomeTeam,
                TeamOrPlayerB       = apiPrediction.AwayTeam,
                MatchDate           = date,
                MatchIdentifier     = string.Format("{0}/vs/{1}/{2}/{3}", apiPrediction.HomeTeam, apiPrediction.AwayTeam,
                                                    tournamentEvent.EventName, date.ToShortDateString().Replace("/", "-")),
                PredictionURL = predictionURL
            };

            footballPrediction.OutcomeProbabilities.Add(Model.Outcome.HomeWin, apiPrediction.ExpectedProbabilities.HomeWinProb);
            footballPrediction.OutcomeProbabilities.Add(Model.Outcome.Draw, apiPrediction.ExpectedProbabilities.DrawProb);
            footballPrediction.OutcomeProbabilities.Add(Model.Outcome.AwayWin, apiPrediction.ExpectedProbabilities.AwayWinProb);

            foreach (var scoreLine in apiPrediction.ScoreProbabilities)
            {
                var key = string.Format("{0}-{1}", scoreLine.HomeGoals.ToString(), scoreLine.AwayGoals.ToString());
                if (!footballPrediction.ScoreLineProbabilities.ContainsKey(key))
                {
                    footballPrediction.ScoreLineProbabilities.Add(key, scoreLine.Probability);
                }
            }
            return(footballPrediction);
        }
        private void ReadPredictionData()
        {
            genericPredictions = new List <Model.GenericPrediction>();

            var files = Directory.GetFiles(@"C:\Users\u0158158\Documents\Visual Studio 2010\Projects\ValueSamurai\ValueSamurai.IKTS\bin\Debug")
                        .Where(f => f.IndexOf("IKTS 2011") > 0)
                        .ToList();
            int i = 1;

            foreach (var file in files)
            {
                var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"{0}\"; Extended Properties=\"Excel 12.0; IMEX=1; HDR=NO\";", file);
                var adapter          = new OleDbDataAdapter("SELECT * FROM [DataDump$]", connectionString);
                using (var ds = new DataSet())
                {
                    adapter.Fill(ds, "DataDump");
                    var rowCollection = ds.Tables["DataDump"].AsEnumerable();
                    Predictions.Add(i, rowCollection);
                }
                i++;
            }

            var teams   = new Dictionary <string, TeamPlayer>();
            var matches = new Dictionary <string, Model.FootballPrediction>();

            foreach (var predictionSet in Predictions.Values)
            {
                foreach (var row in predictionSet)
                {
                    if (row.Field <string>(2) == null)
                    {
                        continue;
                    }
                    TeamPlayer teamA = null;
                    TeamPlayer teamB = null;
                    Model.FootballPrediction prediction = null;

                    var teamAName      = row.Field <string>(2);
                    var teamBName      = row.Field <string>(3);
                    var predictionName = string.Format("{0}|{1}", teamAName, teamBName);

                    if (teams.ContainsKey(teamAName))
                    {
                        teamA = teams[teamAName];
                    }
                    else
                    {
                        teamA = this.fixtureRepository.GetTeamOrPlayerFromName(teamAName);
                        teams.Add(teamAName, teamA);
                    }

                    if (teams.ContainsKey(teamBName))
                    {
                        teamB = teams[teamBName];
                    }
                    else
                    {
                        teamB = this.fixtureRepository.GetTeamOrPlayerFromName(teamBName);
                        teams.Add(teamBName, teamB);
                    }

                    if (matches.ContainsKey(predictionName))
                    {
                        prediction = matches[predictionName];
                    }
                    else
                    {
                        prediction = new Model.FootballPrediction()
                        {
                            TournamentName = "Premier League",
                            TeamOrPlayerA  = teamAName,
                            TeamOrPlayerB  = teamBName,
                            MatchDate      = this.FixturesCouponsOdds.First(x => x.Field <string>("HomeTeam") == teamAName && x.Field <string>("AwayTeam") == teamBName).Field <DateTime>("Date"),
                        };
                        prediction.OutcomeProbabilities.Add(Model.Outcome.HomeWin, 0);
                        prediction.OutcomeProbabilities.Add(Model.Outcome.Draw, 0);
                        prediction.OutcomeProbabilities.Add(Model.Outcome.AwayWin, 0);
                        matches.Add(predictionName, prediction);
                    }

                    int scoreA = (int)row.Field <double>(4);
                    int scoreB = (int)row.Field <double>(5);
                    if (!prediction.ScoreLineProbabilities.ContainsKey(string.Format("{0}-{1}", scoreA.ToString(), scoreB.ToString())))
                    {
                        prediction.ScoreLineProbabilities.Add(string.Format("{0}-{1}", scoreA.ToString(), scoreB.ToString()), row.Field <double>(6));
                        if (scoreA == scoreB)
                        {
                            prediction.OutcomeProbabilities[Model.Outcome.Draw] += row.Field <double>(6);
                        }
                        else if (scoreA > scoreB)
                        {
                            prediction.OutcomeProbabilities[Model.Outcome.HomeWin] += row.Field <double>(6);
                        }
                        else if (scoreA < scoreB)
                        {
                            prediction.OutcomeProbabilities[Model.Outcome.AwayWin] += row.Field <double>(6);
                        }
                    }
                }
            }
            genericPredictions.AddRange(matches.Values);
        }
    private void ReadPredictionData()
    {
      genericPredictions = new List<Model.GenericPrediction>();

      var files = Directory.GetFiles(@"C:\Users\u0158158\Documents\Visual Studio 2010\Projects\ValueSamurai\ValueSamurai.IKTS\bin\Debug")
                           .Where(f => f.IndexOf("IKTS 2011") > 0)
                           .ToList();
      int i = 1;
      foreach (var file in files)
      {
        var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"{0}\"; Extended Properties=\"Excel 12.0; IMEX=1; HDR=NO\";", file);
        var adapter = new OleDbDataAdapter("SELECT * FROM [DataDump$]", connectionString);
        using (var ds = new DataSet())
        {
          adapter.Fill(ds, "DataDump");
          var rowCollection = ds.Tables["DataDump"].AsEnumerable();
          Predictions.Add(i, rowCollection);
        }
        i++;
      }

      var teams = new Dictionary<string, TeamPlayer>();
      var matches = new Dictionary<string, Model.FootballPrediction>();

      foreach (var predictionSet in Predictions.Values)
      {
        foreach (var row in predictionSet)
        {
          if (row.Field<string>(2) == null) continue;
          TeamPlayer teamA = null;
          TeamPlayer teamB = null;
          Model.FootballPrediction prediction = null;

          var teamAName = row.Field<string>(2);
          var teamBName = row.Field<string>(3);
          var predictionName = string.Format("{0}|{1}", teamAName, teamBName);

          if (teams.ContainsKey(teamAName))
            teamA = teams[teamAName];
          else
          {
            teamA = this.fixtureRepository.GetTeamOrPlayerFromName(teamAName);
            teams.Add(teamAName, teamA);
          }

          if (teams.ContainsKey(teamBName))
            teamB = teams[teamBName];
          else
          {
            teamB = this.fixtureRepository.GetTeamOrPlayerFromName(teamBName);
            teams.Add(teamBName, teamB);
          }

          if (matches.ContainsKey(predictionName))
            prediction = matches[predictionName];
          else
          {
            prediction = new Model.FootballPrediction()
            {
              TournamentName = "Premier League",
              TeamOrPlayerA = teamAName,
              TeamOrPlayerB = teamBName,
              MatchDate = this.FixturesCouponsOdds.First(x => x.Field<string>("HomeTeam") == teamAName && x.Field<string>("AwayTeam") == teamBName).Field<DateTime>("Date"),

            };
            prediction.OutcomeProbabilities.Add(Model.Outcome.HomeWin, 0);
            prediction.OutcomeProbabilities.Add(Model.Outcome.Draw, 0);
            prediction.OutcomeProbabilities.Add(Model.Outcome.AwayWin, 0);
            matches.Add(predictionName, prediction);
          }

          int scoreA = (int)row.Field<double>(4);
          int scoreB = (int)row.Field<double>(5);
          if (!prediction.ScoreLineProbabilities.ContainsKey(string.Format("{0}-{1}", scoreA.ToString(), scoreB.ToString())))
          {
            prediction.ScoreLineProbabilities.Add(string.Format("{0}-{1}", scoreA.ToString(), scoreB.ToString()), row.Field<double>(6));
            if (scoreA == scoreB)
              prediction.OutcomeProbabilities[Model.Outcome.Draw] += row.Field<double>(6);
            else if (scoreA > scoreB)
              prediction.OutcomeProbabilities[Model.Outcome.HomeWin] += row.Field<double>(6);
            else if (scoreA < scoreB)
              prediction.OutcomeProbabilities[Model.Outcome.AwayWin] += row.Field<double>(6);
          }
        }
      }
      genericPredictions.AddRange(matches.Values);
    }