public async Task <IActionResult> Index(int page, string orderBy) { const int ResultsPerPage = 10; if (page < 1) { page = 1; } int skip = (page - 1) * ResultsPerPage; ArticlesIndexOutputModel outputModel = await articlesService.GetArticlesAsync(skip, ResultsPerPage, orderBy); if (outputModel.AllArticles == 0) { return(View(outputModel)); } int lastPage = (int)Math.Ceiling(((double)outputModel.AllArticles / ResultsPerPage)); if (page > lastPage) { page = lastPage; return(RedirectToAction(nameof(Index), outputModel)); } outputModel.CurrentPage = page; outputModel.LastPage = lastPage; return(View(outputModel)); }
public async Task <ArticlesIndexOutputModel> GetArticlesAsync(int skip, int take, string orderBy) { IQueryable <Article> query = dbContext.Articles.Where(a => a.IsApproved && !a.IsDeleted).AsQueryable(); if (orderBy == "views") { query = query.OrderByDescending(a => a.Views); } else { query = query.OrderByDescending(a => a.AddedOn); } ArticlesIndexOutputModel outputModel = new ArticlesIndexOutputModel { AllArticles = await query.CountAsync(), Articles = await query .Skip(skip) .Take(take) .ProjectTo <ArticleOutputModel>(mapper.ConfigurationProvider) .ToArrayAsync(), OrderedBy = orderBy, }; return(outputModel); }