public async Task <SearchResultsVm <BlogPostSrVm[]> > SearchBlogPostsAsync(BlogPostSc sc) { //Visitors can only view published blog posts if (_usersService.GetUser() == null) { sc.Status = EnBlogPostStatus.Published; } var specification = new BlogPostSpecification(); specification.SetCriteria(sc); var itemsOnPage = await _blogPostsRepository.SearchAsync(specification); var totalItems = await _blogPostsRepository.CountAsync(specification); var results = new SearchResultsVm <BlogPostSrVm[]>( _mapper.Map <BlogPostSrVm[]>(itemsOnPage), totalItems, itemsOnPage.Count, sc.CurrentPage, sc.Take); return(results); }
public void SetCriteria(BlogPostSc sc) { AddInclude(x => x.Author); if (!string.IsNullOrWhiteSpace(sc.Title)) { Criteria.Add(x => x.Title.Contains(sc.Title)); } if (!string.IsNullOrWhiteSpace(sc.AuthorLastname)) { Criteria.Add(x => x.Author.LastName.Contains(sc.AuthorLastname)); } #region PublishedAt if (sc.PublishedAtFrom.HasValue && sc.PublishedAtTo.HasValue) { Criteria.Add(x => x.PublishedAt.HasValue && x.PublishedAt.Value.Date >= sc.PublishedAtFrom.Value.Date && x.PublishedAt.Value.Date <= sc.PublishedAtTo.Value.Date); } if (sc.PublishedAtFrom.HasValue && !sc.PublishedAtTo.HasValue) { Criteria.Add(x => x.PublishedAt.HasValue && x.PublishedAt.Value.Date >= sc.PublishedAtFrom.Value.Date); } if (!sc.PublishedAtFrom.HasValue && sc.PublishedAtTo.HasValue) { Criteria.Add(x => x.PublishedAt.HasValue && x.PublishedAt.Value.Date <= sc.PublishedAtTo.Value.Date); } #endregion if (sc.Status.HasValue) { Criteria.Add(x => x.Status == sc.Status); } ApplyPagingAndOrder(sc); }