public FixtureStats GetStats(int fixtureId)
        {
            var statsData = new FixtureStats();

            if (fixtureId == 0) return statsData;

            using (var session = NHibernateHelper.OpenSession())
            {
                var battingStats = session.CreateCriteria(typeof (BattingStat))
                    .List<BattingStat>().Where(x => x.Fixture.Id.Equals(fixtureId)).OrderBy(x => x.Position);

                foreach (var battingStat in battingStats)
                {
                    statsData.Batting.Add(Mapper.Map(battingStat, new Batting()));
                }

                var bowlingStats = session.CreateCriteria(typeof(BowlingStat))
                              .List<BowlingStat>().Where(x => x.Fixture.Id.Equals(fixtureId));

                foreach (var bowlingStat in bowlingStats)
                {
                    statsData.Bowling.Add(Mapper.Map(bowlingStat, new Bowling()));
                }

                var fieldingStats = session.CreateCriteria(typeof(FieldingStat))
                             .List<FieldingStat>().Where(x => x.Fixture.Id.Equals(fixtureId));

                foreach (var fieldingStat in fieldingStats)
                {
                    statsData.Fielding.Add(Mapper.Map(fieldingStat, new Fielding()));
                }
            }

            return statsData;
        }
        private void AddBattingStats(ISession session, FixtureStats statsData,
            IReadOnlyDictionary<string, string> paramCollection)
        {
            var battingStatsCriteria = session.CreateCriteria(typeof (BattingStat));

            if (paramCollection.ContainsKey("year") || paramCollection.ContainsKey("team"))
            {
                var fixtureCriteria = battingStatsCriteria.CreateCriteria("Fixture", "f");

                if (paramCollection.ContainsKey("year"))
                {
                    battingStatsCriteria.Add(Expression.Ge("f.DatePlayed",
                        DateTime.Parse(string.Format("31/12/{0}", paramCollection["year"])).AddYears(-1)))
                        .Add(Expression.Lt("f.DatePlayed",
                            DateTime.Parse(string.Format("01/01/{0}", paramCollection["year"])).AddYears(1)));
                }

                if (paramCollection.ContainsKey("team"))
                {
                    fixtureCriteria.CreateCriteria("HomeTeam", "t");

                    fixtureCriteria.Add(Expression.Eq("t.Name", paramCollection["team"]));
                }
            }

            if (paramCollection.ContainsKey("player"))
            {
                var playerCriteria = battingStatsCriteria.CreateCriteria("Player", "p");

                playerCriteria.CreateCriteria("Member", "m");

                playerCriteria.Add(Expression.Like("m.MemberKey", paramCollection["player"], MatchMode.Anywhere));

            }

            var stats = battingStatsCriteria.List<BattingStat>().OrderBy(x => x.Player.Member.MemberKey);

            var playerIdList = new List<int>();
            foreach (var battingStat in stats)
            {
                var playerId = battingStat.Player.Id;
                if (playerIdList.Contains(playerId))
                {
                    CalculateBattingStat(statsData.Batting.Last(), battingStat);
                }
                else
                {
                    statsData.Batting.Add(Mapper.Map(battingStat, new Batting()));
                    SetBattingStat(battingStat, statsData.Batting.Last());
                    playerIdList.Add(playerId);
                }
            }
        }
 public FixtureStats GetStats(Dictionary<string, string> paramCollection)
 {
     var statsData = new FixtureStats();
     using (var session = NHibernateHelper.OpenSession())
     {  
         // get stats
         AddBattingStats(session, statsData, paramCollection);
         AddBowingStats(session, statsData, paramCollection);
         AddFieldingStats(session, statsData, paramCollection);
         return statsData;
     }
 }