public PaginatedResultList <ArticleDto> GetArticlesSummary(ArticlePaginationParameter pagination) { var articles = _articleRepository.GetArticlesSummary(pagination); var articleDto = _mapper.Map <PaginatedResultList <ArticleDto> >(articles); return(articleDto); }
public async Task <PaginationResponse <ArticleViewModel> > QueryByPageAsync(ArticlePaginationParameter parameters) { var predicate = PredicateBuilder.New <Article>(true); if (parameters.IsDraft.HasValue) { predicate.And(x => x.IsDraft == parameters.IsDraft); } var result = new PaginationResponse <ArticleViewModel> { PageIndex = parameters.PageIndex, PageSize = parameters.PageSize }; // TODO: 这里用扩展方法封装一下 var futureTotal = _context.Article.DeferredCount(predicate).FutureValue(); var futureList = _context.Article.Where(predicate) .Select(x => new { x.Alias, x.CommentCount, x.Title, x.CreatedAt, x.Id, x.IsDraft, x.Digest, x.ViewCount, CategoryAlias = x.CategoryNavigation.Alias }) .OrderByDescending(x => x.CreatedAt) .Skip(parameters.PageSize * parameters.PageIndex) .Take(parameters.PageSize) .Future(); result.Total = await futureTotal.ValueAsync(); result.List = _mapper.Map <IEnumerable <ArticleViewModel> >(await futureList.ToListAsync()); result.PageIndex = parameters.PageIndex; result.PageSize = parameters.PageSize; foreach (var i in result.List) { i.Path = GetArticleRoutePath(i); } return(result); }
public async Task <IActionResult> GetPaged([FromQuery] ArticlePaginationParameter parameters) { if (HttpContext.User.Identity.IsAuthenticated) { parameters.IsDraft = null; } return(Ok(await _service.QueryByPageAsync(parameters))); }
public async Task <IActionResult> Index(int page = 0) { var articlePagination = new ArticlePaginationParameter { PageSize = this.PageSize, PageIndex = page }; var articles = _articleService.GetArticlesSummary(articlePagination); return(View(articles)); }
public async Task <PaginatedResultList <Article> > GetArticlesSummaryAsync(ArticlePaginationParameter pagination) { var query = _dbSet.Where(x => x.Status.IsPublished && !x.Status.Deleted).AsQueryable(); if (!string.IsNullOrWhiteSpace(pagination.Title)) { query = query.Where(x => x.Content.Title.Contains(pagination.Title.Trim().ToLowerInvariant())); } //数据库中已发表文章总数 var itemsCount = await query.Select(x => x.Id).CountAsync(); query = query.Skip(pagination.GetSkipCount()).Take(pagination.PageSize); query = query.ApplySort(pagination.OrderBy, _mappingContainer.Resolve <ArticleDto, Article>()); var articles = await query.Select( x => new Article( new Domain.Models.ValueObjects.ArticleContent(x.Content.Title, x.Content.CoverUrl, x.Content.Summary, null, null), x.Status, x.Settings, x.Author) ).AsNoTracking().ToListAsync(); return(new PaginatedResultList <Article>(pagination, articles, itemsCount)); }
public async Task <PaginatedResultList <ArticleDto> > GetArticlesSummaryAsync(ArticlePaginationParameter pagination) { var articles = await _articleRepository.GetArticlesSummaryAsync(pagination); var articleDto = _mapper.Map <PaginatedResultList <ArticleDto> >(articles); return(articleDto); }