public async Task <PagedResponse <FoundAuthorDTO> > Handle(SearchAuthorQuery request, CancellationToken cancellationToken) { AuthorSearchCondition searchCondition = new AuthorSearchCondition() { Name = GetFilterValues(request.SearchCondition.Name), Surname = GetFilterValues(request.SearchCondition.Surname), Patronymic = GetFilterValues(request.SearchCondition.Patronymic), Page = request.SearchCondition.Page, PageSize = request.SearchCondition.PageSize, SortDirection = request.SearchCondition.SortDirection, SortProperty = request.SearchCondition.SortProperty }; var sortProperty = GetSortProperty(searchCondition.SortProperty); IReadOnlyCollection <Author> foundAuthor = await authorService.FindAsync(searchCondition, sortProperty); FoundAuthorDTO[] mappedAuthor = foundAuthor.Select(MapToFoundAuthorDTO).ToArray(); var totalCount = await authorService.CountAsync(searchCondition); return(new PagedResponse <FoundAuthorDTO> { Items = mappedAuthor, TotalCount = totalCount }); }
public async Task <IReadOnlyCollection <Author> > FindAsync(AuthorSearchCondition searchCondition, string sortProperty) { IQueryable <Author> query = BuildFindQuery(searchCondition); query = searchCondition.ListSortDirection == ListSortDirection.Ascending ? query.OrderBy(sortProperty) : query.OrderByDescending(sortProperty); return(await query.Page(searchCondition.Page, searchCondition.PageSize).ToListAsync()); }
private IQueryable <Author> BuildFindQuery(AuthorSearchCondition searchCondition) { IQueryable <Author> query = dbContext.Authors; if (searchCondition.Name.Any()) { foreach (var authorName in searchCondition.Name) { var upperAuthorName = authorName.ToUpper().Trim(); query = query.Where(x => x.Name != null && x.Name.ToUpper().Contains(upperAuthorName)); } } if (searchCondition.Surname.Any()) { foreach (var authorSurname in searchCondition.Surname) { var upperAuthorSurname = authorSurname.ToUpper().Trim(); query = query.Where(x => x.Surname != null && x.Surname.ToUpper().Contains(upperAuthorSurname)); } } if (searchCondition.Patronymic.Any()) { foreach (var authorPatronymic in searchCondition.Patronymic) { var upperAuthorPatronymic = authorPatronymic.ToUpper().Trim(); query = query.Where(x => x.Patronymic != null && x.Patronymic.ToUpper().Contains(upperAuthorPatronymic)); } } return(query); }
public async Task <IActionResult> SearchAuthor([FromBody] AuthorSearchCondition searchCondition, CancellationToken cancellationToken = default) { return(await ExecuteQueryAsync(new SearchAuthorQuery(searchCondition), cancellationToken : cancellationToken)); }
public async Task <long> CountAsync(AuthorSearchCondition searchCondition) { IQueryable <Author> query = BuildFindQuery(searchCondition); return(await query.LongCountAsync()); }