public IActionResult GetStudents( [FromQuery] StudentsResourceParameters studentsResourceParameters) { var studentsFromRepo = _repo.GetStudents(studentsResourceParameters); var previousPageLink = studentsFromRepo.HasPrevious ? CreateStudentsResourceUri(studentsResourceParameters, ResourceUriType.PreviousPage) : null; var nextPageLink = studentsFromRepo.HasNext ? CreateStudentsResourceUri(studentsResourceParameters, ResourceUriType.NextPage) : null; var paginationMetadata = new { totalCount = studentsFromRepo.TotalCount, pageSize = studentsFromRepo.PageSize, currentPage = studentsFromRepo.CurrentPage, totalPages = studentsFromRepo.TotalPages, previousPageLink, nextPageLink }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata)); return(base.Ok(_mapper.Map <IEnumerable <StudentDto> >(studentsFromRepo))); }
public PagedList <Student> GetStudents( StudentsResourceParameters studentResourceParameters) { if (studentResourceParameters == null) { throw new ArgumentNullException(nameof(studentResourceParameters)); } var collection = _context.Students as IQueryable <Student>; if (!String.IsNullOrWhiteSpace(studentResourceParameters.HouseName)) { var houseName = studentResourceParameters.HouseName.Trim(); collection = collection.Where(s => s.House.Name == houseName); } if (!String.IsNullOrWhiteSpace(studentResourceParameters.SearchQuery)) { var searchQuery = studentResourceParameters.SearchQuery.ToLower().Trim(); collection = collection.Where(s => s.FirstName.ToLower().Contains(searchQuery) || s.MiddleNames.ToLower().Contains(searchQuery) || s.LastName.ToLower().Contains(searchQuery)); } if (studentResourceParameters.IncludeHouse) { collection = collection.Include(s => s.House); } return(PagedList <Student> .Create(collection, studentResourceParameters.PageNumber, studentResourceParameters.PageSize)); }
private string CreateStudentsResourceUri( StudentsResourceParameters studentsResourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(Url.Link("GetStudents", new { pageNumber = studentsResourceParameters.PageNumber - 1, pageSize = studentsResourceParameters.PageSize, mainCategory = studentsResourceParameters.HouseName, searchQuery = studentsResourceParameters.SearchQuery })); case ResourceUriType.NextPage: return(Url.Link("GetStudents", new { pageNumber = studentsResourceParameters.PageNumber + 1, pageSize = studentsResourceParameters.PageSize, mainCategory = studentsResourceParameters.HouseName, searchQuery = studentsResourceParameters.SearchQuery })); default: return(Url.Link("GetStudents", new { pageNumber = studentsResourceParameters.PageNumber, pageSize = studentsResourceParameters.PageSize, mainCategory = studentsResourceParameters.HouseName, searchQuery = studentsResourceParameters.SearchQuery })); } }