public StatTableDto GetPlayerSkaterTable(int skaterId, StatParametersDto paramDto) { StatTableDto statTableDto = new StatTableDto(); StatParametersDto cleanParameters = CleanPlayerParameters(paramDto); using (db = new BojoBoxContext()) { LeagueDto leagueDto = GetLeague(cleanParameters.League.Value); TeamDto teamDto = GetTeam(cleanParameters.Team.Value); PlayerDto skater = GetSkater(skaterId); statTableDto.HeaderText = skater.Name; var skaterQuery = db.SkaterSeasons .Include(a => a.Skater) .Include(a => a.Team) .Include(a => a.League) .Where(a => a.SkaterId == skater.Id); bool isPlayoffs = CheckIfPlayoffs(cleanParameters.SeasonType.Value); skaterQuery = skaterQuery.Where(a => a.isPlayoffs == isPlayoffs); if (cleanParameters.League > 0) { skaterQuery = skaterQuery.Where(a => a.LeagueId == leagueDto.Id); } int teamCount = skaterQuery.Where(a => a.Team != null).Select(a => a.Team.Id).Distinct().Count(); statTableDto.Teams = skaterQuery.Select(a => a.Team).Where(a => a != null).DistinctBy(a => a.Id).Select(a => TeamDto.Create(a)).ToList(); if (cleanParameters.Team > 0) { skaterQuery = skaterQuery.Where(a => a.TeamId == cleanParameters.Team); } else { skaterQuery = skaterQuery.Where(a => a.SubtotalForId == null); } List <SkaterSeasonFullDto> skaterSeasonDtos = skaterQuery.Select(a => SkaterSeasonFullDto.Create(a)).ToList(); int i = 1; List <PlayerTableRow> rows = new List <PlayerTableRow>(); foreach (var dto in skaterSeasonDtos) { PlayerTableRow row = new PlayerTableRow(); row.Player = dto.Skater; row.Rank = i++; row.Season = dto.Season; row.Team = dto.Team; row.Stats = GetSkaterStats(dto); rows.Add(row); } if (cleanParameters.Col == null) { rows = rows.OrderByDescending(a => a.Season).ToList(); } else { rows = rows.OrderByDescending(a => a.Stats.ElementAt(cleanParameters.Col.Value)).ThenByDescending(a => a.Stats.ElementAt(13)).ToList(); } statTableDto.PlayerRows = rows; List <int> totals = new List <int>(); if (rows.Any()) { totals = GetTotals(rows); totals.Insert(0, teamCount); totals.Insert(0, rows.Count()); } statTableDto.Totals = totals; } statTableDto.DisplayType = "player"; statTableDto.PlayerType = "skater"; statTableDto.StatParameters = cleanParameters; return(statTableDto); }
public StatTableDto GetSeasonSkaterTable(StatParametersDto paramDto) { StatTableDto statTableDto = new StatTableDto(); StatParametersDto cleanParameters = CleanSeasonParameters(paramDto); cleanParameters.Col = cleanParameters.Col ?? 3; using (db = new BojoBoxContext()) { LeagueDto leagueDto = GetLeague(cleanParameters.League.Value); TeamDto teamDto = GetTeam(cleanParameters.Team.Value); statTableDto.Teams = GetTeamParameters(leagueDto.Id); statTableDto.Seasons = GetSeasonParameters(leagueDto.Id, cleanParameters.SeasonType == 2); statTableDto.HeaderText = leagueDto.Acronym + " - Season Stats"; var skaterSeasonQuery = db.SkaterSeasons .Where(a => a.LeagueId == leagueDto.Id); if (teamDto != null) { int?franchiseId = null; if (teamDto.FranchiseId.HasValue) { franchiseId = db.Franchises.FirstOrDefault(a => a.Id == teamDto.FranchiseId).Id; } if (franchiseId.HasValue) { skaterSeasonQuery = skaterSeasonQuery.Include(a => a.Team).Where(a => a.Team.FranchiseId == franchiseId); } else { skaterSeasonQuery = skaterSeasonQuery.Where(a => a.TeamId == teamDto.Id); } } else { skaterSeasonQuery = skaterSeasonQuery.Where(a => a.SubtotalForId == null); } switch (cleanParameters.SeasonType) { case 1: skaterSeasonQuery = skaterSeasonQuery.Where(a => !a.isPlayoffs); break; case 2: skaterSeasonQuery = skaterSeasonQuery.Where(a => a.isPlayoffs); break; } if (cleanParameters.Era > 0) { switch (cleanParameters.Era) { case 1: skaterSeasonQuery = skaterSeasonQuery.Where(a => a.Season >= 12); break; case 2: skaterSeasonQuery = skaterSeasonQuery.Where(a => a.Season <= 11 && a.Season >= 9); break; case 3: skaterSeasonQuery = skaterSeasonQuery.Where(a => a.Season <= 8); break; } } if (cleanParameters.Season > 0) { skaterSeasonQuery = skaterSeasonQuery.Where(a => a.Season == cleanParameters.Season); } IQueryable <IdStatPair> idStatPairs = GetIdStatPairs(cleanParameters.Col, skaterSeasonQuery); idStatPairs = idStatPairs.OrderByDescending(a => a.Stat); // TODO: Check if to sort ascending int pageSize = 20; statTableDto.PageCount = GetPageCount(cleanParameters, idStatPairs); int[] selectedIds = idStatPairs.Select(b => b.Id).Skip(cleanParameters.Page.Value * pageSize).Take(pageSize).ToArray(); var skaterSeasonDtos = db.SkaterSeasons .Include(a => a.Team) .Include(a => a.Skater) .Where(a => selectedIds.Contains(a.Id)) .Select(a => SkaterSeasonFullDto.Create(a)) .ToList(); List <PlayerTableRow> rows = new List <PlayerTableRow>(); foreach (var dto in skaterSeasonDtos) { PlayerTableRow row = new PlayerTableRow(); row.Player = dto.Skater; row.Season = dto.Season; row.Team = dto.Team; row.Stats = GetSkaterStats(dto); rows.Add(row); } statTableDto.PlayerRows = rows.OrderByDescending(a => a.Stats.ElementAt(cleanParameters.Col.Value)).ThenByDescending(a => a.Stats.ElementAt(13)); AddRanks(statTableDto.PlayerRows, 1 + (cleanParameters.Page.Value * pageSize)); } statTableDto.DisplayType = "season"; statTableDto.PlayerType = "skater"; statTableDto.StatParameters = cleanParameters; return(statTableDto); }