Reputation: 620
I am writing to seek help, in how can I implement a page number filter into the web api method below. I am aware of the 'pagesize' and 'take' property but this only allowed me to filter number of records.
I would like to be able, to show all records but spread the data through number of pages such as api/test?name=frs&page=2
Please provide some help/guide into how I can start implementing this task further, thanks.
public HttpResponseMessage get([FromUri] Query query )
{
int pageSize = 10;
int page = 0;
IQueryable<data_qy> Data = null;
var totalCount = Data.Count();
// var totalPages = (int)Math.Ceiling((double)totalCount / pageSize);
// var urlHelper = new UrlHelper(Request);
// var prevLink = page > 0 ? urlHelper.Link("DefaultApi", new { page = page - 1 }) : "";
// var nextLink = page < totalPages - 1 ? urlHelper.Link("DefaultApi", new { page = page + 1 }) : "";
Data = Data.OrderByDescending(c => c.UploadDate);
var data = Data.Skip(pageSize * page).Take(pageSize).ToList();
if (!data.Any())
{
var message = string.Format("No data found");
return Request.CreateErrorResponse(HttpStatusCode.NotFound, message);
}
//return Request.CreateResponse(HttpStatusCode.OK, data);
//return Request.CreateResponse(HttpStatusCode.OK, new { totalCount, totalPages, prevLink, nextLink, data });
return Request.CreateResponse(HttpStatusCode.OK, new { totalCount, data });
}
Upvotes: 0
Views: 1034
Reputation: 5914
Try this combined with your pagination code:
var pageValue = Request.RequestUri.ParseQueryString().Get("page");
int currentPage;
if (!int.TryParse(pageValue, out currentPage))
{
currentPage = 0;
}
Upvotes: 1