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()); } }
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()); } }