public async Task <IActionResult> Get([FromQuery] AuthorSearchRequest request) { PagedList <AuthorDto> result = null; PagedList <ExpandoObject> result2 = null; if (!string.IsNullOrEmpty(request.Fields)) { result2 = await _authorService.GetPagedWithFieldsAsync(request); } else { result = await _authorService.GetPagedAsync(request); } if (result == null && result2 == null) { return(NotFound()); } if (result != null) { return(Ok(result)); } return(Ok(result2)); }
public async Task <PagedList <ExpandoObject> > GetPagedWithFieldsAsync(AuthorSearchRequest request) { var query = _context.Authors.AsNoTracking(); ApplyFiltering(ref query, request); ApplyOrdering(ref query, request); ApplyPaging(ref query, request); List <AuthorDto> list = await query.Select(x => x.ToDto()) .ToListAsync(); return(new PagedList <ExpandoObject>(list.ShapeData(request.Fields).ToList())); }
public async Task <PagedList <AuthorDto> > GetPagedAsync(AuthorSearchRequest request) { var query = _context.Authors.AsNoTracking(); ApplyFiltering(ref query, request); ApplyOrdering(ref query, request); ApplyPaging(ref query, request); List <AuthorDto> list = await query.Select(x => x.ToDto()) .ToListAsync(); return(new PagedList <AuthorDto>(list)); }
private void ApplyFiltering(ref IQueryable <AuthorEntity> query, AuthorSearchRequest request) { if (!string.IsNullOrEmpty(request.Term)) { query = query.Where(x => x.FirstName.ToLower().Contains(request.Term.Trim().ToLower()) || x.LastName.ToLower().Contains(request.Term.Trim().ToLower()) || x.MainCategory.ToLower().Contains(request.Term.Trim().ToLower())); } if (!string.IsNullOrEmpty(request.Name)) { query = query.Where(x => x.FirstName.ToLower().Contains(request.Name.Trim().ToLower()) || x.LastName.ToLower().Contains(request.Name.Trim().ToLower())); } if (!string.IsNullOrEmpty(request.MainCategory)) { query = query.Where(x => x.MainCategory.ToLower().Contains(request.MainCategory.Trim().ToLower())); } }
private void ApplyOrdering(ref IQueryable <AuthorEntity> query, AuthorSearchRequest request) { switch (request.OrderBy) { case AuthorOrderBy.AGE: if (request.SortOrder == SortOrder.Descending) { query = query.OrderByDescending(a => a.DateOfBirth); } else { query = query.OrderBy(a => a.DateOfBirth); } break; case AuthorOrderBy.MAIN_CATEGORY: if (request.SortOrder == SortOrder.Descending) { query = query.OrderByDescending(a => a.MainCategory); } else { query = query.OrderBy(a => a.MainCategory); } break; default: if (request.SortOrder == SortOrder.Descending) { query = query.OrderByDescending(a => a.FirstName).ThenBy(a => a.LastName); } else { query = query.OrderBy(a => a.FirstName).ThenBy(a => a.LastName); } break; } }
private void ApplyPaging(ref IQueryable <AuthorEntity> query, AuthorSearchRequest request) { query = query.Skip(request.PageSize * (request.PageNumber - 1)) .Take(request.PageSize); }