Example #1
0
        public List <ReplayMatch> ReadGameModeRecords(GameMode gameMode, ReplayFilter replayFilter)
        {
            var replayBuild = HeroesHelpers.Builds.GetReplayBuildsFromSeason(replayFilter.SelectedSeason);

            using (var db = new ReplaysContext())
            {
                IQueryable <ReplayMatch> query = db.Set <ReplayMatch>().AsNoTracking();

                if (gameMode == (GameMode.Brawl ^ GameMode.Custom ^ GameMode.HeroLeague ^ GameMode.QuickMatch ^ GameMode.TeamLeague ^ GameMode.UnrankedDraft))
                {
                    query = query.Where(x => x.ReplayBuild >= replayBuild.Item1 && x.ReplayBuild < replayBuild.Item2);
                }
                else
                {
                    query = query.Where(x => x.GameMode == gameMode && x.ReplayBuild >= replayBuild.Item1 && x.ReplayBuild < replayBuild.Item2);
                }

                if (replayFilter.SelectedReplayId > 0)
                {
                    query = query.Where(x => x.ReplayId == replayFilter.SelectedReplayId);
                }

                if (replayFilter.SelectedMapOption != replayFilter.MapOptionsList[0])
                {
                    query = query.Where(x => x.MapName == replayFilter.SelectedMapOption);
                }

                if (replayFilter.SelectedBuildOption != replayFilter.BuildOptionsList[0])
                {
                    int?build = Convert.ToInt32(replayFilter.SelectedBuildOption);
                    query = query.Where(x => x.ReplayBuild == build);
                }

                if (replayFilter.SelectedGameTimeOption != replayFilter.GameTimeOptionList[0])
                {
                    var value = HeroesHelpers.GameDates.GetGameTimeModifiedTime(replayFilter.SelectedGameTimeOption);

                    if (value.Item1 == "less than")
                    {
                        query = query.Where(x => x.ReplayLengthTicks < value.Item2.Ticks);
                    }
                    else if (value.Item1 == "longer than")
                    {
                        query = query.Where(x => x.ReplayLengthTicks > value.Item2.Ticks);
                    }
                }

                if (replayFilter.SelectedGameDateOption != replayFilter.GameDateOptionList[0])
                {
                    var value = HeroesHelpers.GameDates.GetGameDateModifiedDate(replayFilter.SelectedGameDateOption);

                    if (value.Item1 == "last")
                    {
                        query = query.Where(x => x.TimeStamp >= value.Item2);
                    }
                    else if (value.Item1 == "more than")
                    {
                        query = query.Where(x => x.TimeStamp <= value.Item2);
                    }
                }

                if (!string.IsNullOrEmpty(replayFilter.SelectedBattleTag))
                {
                    query = from r in query
                            join mp in db.ReplayMatchPlayers on r.ReplayId equals mp.ReplayId
                            join ahp in db.ReplayAllHotsPlayers on mp.PlayerId equals ahp.PlayerId
                            where ahp.BattleTagName.ToLower().Contains(replayFilter.SelectedBattleTag.ToLower())
                            select r;
                }

                if (replayFilter.SelectedCharacter != replayFilter.HeroesList[0])
                {
                    if (replayFilter.IsGivenBattleTagOnlyChecked)
                    {
                        query = from r in query
                                join mp in db.ReplayMatchPlayers on r.ReplayId equals mp.ReplayId
                                join ahp in db.ReplayAllHotsPlayers on mp.PlayerId equals ahp.PlayerId
                                where ahp.BattleTagName.ToLower().Contains(replayFilter.SelectedBattleTag.ToLower()) &&
                                mp.Character == replayFilter.SelectedCharacter
                                select r;
                    }
                    else
                    {
                        query = from r in query
                                join mp in db.ReplayMatchPlayers on r.ReplayId equals mp.ReplayId
                                where mp.Character == replayFilter.SelectedCharacter
                                select r;
                    }
                }

                return(query.Distinct().OrderByDescending(x => x.TimeStamp).ToList());
            }
        }
Example #2
0
        public List <ReplayMatch> ReadGameModeRecords(GameMode gameMode, ReplayFilter replayFilter)
        {
            var replayBuild = HeroesHelpers.Builds.GetReplayBuildsFromSeason(replayFilter.SelectedSeason);

            using (var db = new ReplaysContext())
            {
                IQueryable <ReplayMatch> query = db.Set <ReplayMatch>().AsNoTracking();

                if (gameMode == (GameMode.Brawl ^ GameMode.Custom ^ GameMode.StormLeague ^ GameMode.HeroLeague ^ GameMode.QuickMatch ^ GameMode.TeamLeague ^ GameMode.UnrankedDraft))
                {
                    query = query.Where(x => x.ReplayBuild >= replayBuild.Item1 && x.ReplayBuild < replayBuild.Item2);
                }
                else
                {
                    query = query.Where(x => x.GameMode == gameMode && x.ReplayBuild >= replayBuild.Item1 && x.ReplayBuild < replayBuild.Item2);
                }

                if (replayFilter.SelectedReplayId > 0)
                {
                    query = query.Where(x => x.ReplayId == replayFilter.SelectedReplayId);
                }

                if (replayFilter.SelectedMapOption != replayFilter.MapOptionsList[0])
                {
                    query = query.Where(x => x.MapName == replayFilter.SelectedMapOption);
                }

                if (replayFilter.SelectedBuildOption != replayFilter.BuildOptionsList[0])
                {
                    int?build = Convert.ToInt32(replayFilter.SelectedBuildOption);
                    query = query.Where(x => x.ReplayBuild == build);
                }

                if (replayFilter.SelectedGameTimeOption != FilterGameTimeOption.Any)
                {
                    var value = HeroesHelpers.GameDateFilters.GetGameTimeModifiedTime(replayFilter.SelectedGameTimeOption);

                    if (value.Item1 == "less than")
                    {
                        query = query.Where(x => x.ReplayLengthTicks < value.Item2.Ticks);
                    }
                    else if (value.Item1 == "longer than")
                    {
                        query = query.Where(x => x.ReplayLengthTicks > value.Item2.Ticks);
                    }
                }

                if (replayFilter.SelectedGameDateOption != FilterGameDateOption.Any)
                {
                    var value = HeroesHelpers.GameDateFilters.GetGameDateModifiedDate(replayFilter.SelectedGameDateOption);

                    if (value.Item1 == "last")
                    {
                        query = query.Where(x => x.TimeStamp >= value.Item2);
                    }
                    else if (value.Item1 == "more than")
                    {
                        query = query.Where(x => x.TimeStamp <= value.Item2);
                    }
                }

                if (!string.IsNullOrEmpty(replayFilter.SelectedBattleTag))
                {
                    query = from r in query.AsNoTracking()
                            join mp in db.ReplayMatchPlayers.AsNoTracking() on r.ReplayId equals mp.ReplayId
                            join ahp in db.ReplayAllHotsPlayers.AsNoTracking() on mp.PlayerId equals ahp.PlayerId
                            where ahp.BattleTagName.ToLower().Contains(replayFilter.SelectedBattleTag.ToLower())
                            select r;
                }

                if (replayFilter.SelectedCharacter != replayFilter.HeroesList[0])
                {
                    if (replayFilter.IsGivenBattleTagOnlyChecked)
                    {
                        query = from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers.AsNoTracking() on r.ReplayId equals mp.ReplayId
                                join ahp in db.ReplayAllHotsPlayers.AsNoTracking() on mp.PlayerId equals ahp.PlayerId
                                where ahp.BattleTagName.ToLower().Contains(replayFilter.SelectedBattleTag.ToLower()) &&
                                mp.Character == replayFilter.SelectedCharacter
                                select r;
                    }
                    else
                    {
                        query = from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers.AsNoTracking() on r.ReplayId equals mp.ReplayId
                                where mp.Character == replayFilter.SelectedCharacter
                                select r;
                    }
                }

                // in party
                if (replayFilter.SelectedPartyCount != replayFilter.PartyCountList[0] && replayFilter.SelectedPartyCount != replayFilter.PartyCountList[1])
                {
                    int partyCount = HeroesHelpers.Parties.GetPartyCount(replayFilter.SelectedPartyCount);

                    query = from r in query.AsNoTracking()
                            join mp in db.ReplayMatchPlayers on r.ReplayId equals mp.ReplayId
                            where mp.PartySize == partyCount
                            select r;

                    if (replayFilter.IsPartyBattleTagOnlyChecked && replayFilter.IsPartyHeroOnlyChecked)
                    {
                        query = from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers.AsNoTracking() on r.ReplayId equals mp.ReplayId
                                join ahp in db.ReplayAllHotsPlayers on mp.PlayerId equals ahp.PlayerId
                                where mp.PartySize == partyCount && mp.Character == replayFilter.SelectedCharacter &&
                                ahp.BattleTagName.ToLower().Contains(replayFilter.SelectedBattleTag.ToLower())
                                select r;
                    }
                    else if (!replayFilter.IsPartyBattleTagOnlyChecked && replayFilter.IsPartyHeroOnlyChecked)
                    {
                        query = from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers.AsNoTracking() on r.ReplayId equals mp.ReplayId
                                where mp.PartySize == partyCount && mp.Character == replayFilter.SelectedCharacter
                                select r;
                    }
                    else if (replayFilter.IsPartyBattleTagOnlyChecked && !replayFilter.IsPartyHeroOnlyChecked)
                    {
                        query = from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers.AsNoTracking().AsNoTracking() on r.ReplayId equals mp.ReplayId
                                join ahp in db.ReplayAllHotsPlayers on mp.PlayerId equals ahp.PlayerId
                                where mp.PartySize == partyCount && ahp.BattleTagName.ToLower().Contains(replayFilter.SelectedBattleTag.ToLower())
                                select r;
                    }
                    else
                    {
                        query = from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers on r.ReplayId equals mp.ReplayId
                                where mp.PartySize == partyCount
                                select r;
                    }
                }

                // party solo
                if (replayFilter.SelectedPartyCount == replayFilter.PartyCountList[1])
                {
                    if (replayFilter.IsPartyBattleTagOnlyChecked && replayFilter.IsPartyHeroOnlyChecked)
                    {
                        query = from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers on r.ReplayId equals mp.ReplayId
                                join ahp in db.ReplayAllHotsPlayers on mp.PlayerId equals ahp.PlayerId
                                where mp.Character == replayFilter.SelectedCharacter &&
                                ahp.BattleTagName.ToLower().Contains(replayFilter.SelectedBattleTag.ToLower()) &&
                                mp.PartyValue == 0
                                select r;
                    }
                    else if (!replayFilter.IsPartyBattleTagOnlyChecked && replayFilter.IsPartyHeroOnlyChecked)
                    {
                        query = from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers on r.ReplayId equals mp.ReplayId
                                where mp.Character == replayFilter.SelectedCharacter &&
                                mp.PartyValue == 0
                                select r;
                    }
                    else if (replayFilter.IsPartyBattleTagOnlyChecked && !replayFilter.IsPartyHeroOnlyChecked)
                    {
                        query = from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers on r.ReplayId equals mp.ReplayId
                                join ahp in db.ReplayAllHotsPlayers on mp.PlayerId equals ahp.PlayerId
                                where ahp.BattleTagName.ToLower().Contains(replayFilter.SelectedBattleTag.ToLower()) &&
                                mp.PartyValue == 0
                                select r;
                    }
                    else
                    {
                        query = from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers on r.ReplayId equals mp.ReplayId
                                join party in
                                from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers on r.ReplayId equals mp.ReplayId
                                where mp.PartyValue == 0
                                group mp by new
                        {
                            mp.ReplayId,
                            mp.PartyValue,
                        }
                        into grp
                        where grp.Count() == 10
                        select new
                        {
                            grp.Key.ReplayId,
                            grp.Key.PartyValue,
                        } on r.ReplayId equals party.ReplayId
                        select r;
                    }
                }

                // account level
                if (replayFilter.SelectedAccountLevel > 0)
                {
                    if (!replayFilter.IsAccountBattleTagOnlyChecked && !replayFilter.IsAccountHeroOnlyChecked)
                    {
                        query = from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers on r.ReplayId equals mp.ReplayId
                                where mp.AccountLevel >= replayFilter.SelectedAccountLevel
                                select r;
                    }
                    else if (replayFilter.IsAccountBattleTagOnlyChecked && !replayFilter.IsAccountHeroOnlyChecked)
                    {
                        query = from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers on r.ReplayId equals mp.ReplayId
                                join ahp in db.ReplayAllHotsPlayers on mp.PlayerId equals ahp.PlayerId
                                where ahp.BattleTagName.ToLower().Contains(replayFilter.SelectedBattleTag.ToLower()) &&
                                mp.AccountLevel >= replayFilter.SelectedAccountLevel
                                select r;
                    }
                    else if (!replayFilter.IsAccountBattleTagOnlyChecked && replayFilter.IsAccountHeroOnlyChecked)
                    {
                        query = from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers on r.ReplayId equals mp.ReplayId
                                join ahp in db.ReplayAllHotsPlayers on mp.PlayerId equals ahp.PlayerId
                                where mp.Character == replayFilter.SelectedCharacter &&
                                mp.AccountLevel >= replayFilter.SelectedAccountLevel
                                select r;
                    }
                    else
                    {
                        query = from r in query.AsNoTracking()
                                join mp in db.ReplayMatchPlayers on r.ReplayId equals mp.ReplayId
                                join ahp in db.ReplayAllHotsPlayers on mp.PlayerId equals ahp.PlayerId
                                where ahp.BattleTagName.ToLower().Contains(replayFilter.SelectedBattleTag.ToLower()) &&
                                mp.Character == replayFilter.SelectedCharacter &&
                                mp.AccountLevel >= replayFilter.SelectedAccountLevel
                                select r;
                    }
                }

                return(query.Distinct().OrderByDescending(x => x.TimeStamp).ToList());
            }
        }