public async Task <ActionResult> GetArticles([FromQuery] PaginationInputModel pagination) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var user = (User)HttpContext.Items["user"]; var articles = await _context.Subscriptions .Include(sub => sub.Publisher) .ThenInclude(pub => pub.Articles) .Where(sub => sub.UserId == user.Id) .SelectMany(sub => sub.Publisher.Articles) .OrderByDescending(article => article.PublishedAt) .Paginate(pagination) .ToListAsync(); var models = articles.Select(article => new ArticleViewModel() { Title = article.Title, Url = article.Url, UrlToImage = article.UrlToImage, PublishedAt = article.PublishedAt, PublisherId = article.PublisherId, Description = article.Description }).ToList(); return(Ok(new { models.Count, articles = models })); }
public static IQueryable <T> Paginate <T>(this IOrderedQueryable <T> queryable, PaginationInputModel pagination) { return(queryable.Skip(pagination.Offset).Take(pagination.Size)); }