public virtual async Task <GetArticleListOutput> GetArticleWithFilter(GetArticleListFilter filter) { var query = _blogManager.GetAll().AsEnumerable() .WhereIf(filter.UserId != 0, a => a.CreatorUserId == filter.UserId) .WhereIf(!filter.Keyword.IsNullOrWhiteSpace(), a => a.Article.Content.Contains(filter.Keyword) || a.Article.Title.ToLower().Contains(filter.Keyword.ToLower())) .ToList(); return(await Task.Run(() => new GetArticleListOutput { AllResultCount = query.Count, Articles = query .Skip(filter.SkipCount) .Take(filter.MaxResultCount) .Select(a => new GetArticleListDto { Id = a.Id, Title = a.Article.Title, Content = string.Join("", a.Article.Content.Take(ListContentLength)), Image = new Regex(@"!\[.*?\]\((.*?)\)").Match(a.Article.Content).Groups[1].Value, CreationTime = a.CreationTime, CreatorUserId = a.CreatorUserId ?? AppConsts.FallBackUserId }) .OrderByDescending(a => a.CreationTime) })); }
public async Task <ActionResult> Index(int page, long user, string keyword) { var filter = new GetArticleListFilter { MaxResultCount = PageSize, SkipCount = (page <= 1 ? 0 : page - 1) * PageSize, UserId = user, Keyword = keyword }; var result = await _articleAppService.GetArticleWithFilter(filter); return(View(new IndexViewModel { Articles = result, Filter = filter })); }