public async Task <LeaderboardsViewModel> GetLeaderboardData(LeaderboardsInputModel inputModel) { List <PlayerLeaderboardsViewModel> players = await this.context.Heroes .Select(x => new PlayerLeaderboardsViewModel { Username = x.Name, Points = (int)typeof(Statistics).GetProperty(inputModel.Criteria).GetValue(x.Statistics), }) .ToListAsync(); int pagesCount = (players.Count / PlayersPerPage) + 1; players = players .OrderByDescending(x => x.Points) .Skip((PlayersPerPage * inputModel.Page) - PlayersPerPage) .Take(PlayersPerPage).ToList(); return(new LeaderboardsViewModel() { Players = players, Criteria = inputModel.Criteria, Pages = pagesCount, CurrentPage = inputModel.Page, }); }
public async Task <IActionResult> Index(LeaderboardsInputModel inputModel) { LeaderboardsViewModel viewModel = await this.leaderboardsService.GetLeaderboardData(inputModel); return(this.View(viewModel)); }