【发布时间】:2014-09-05 18:31:17
【问题描述】:
我写信寻求帮助,我如何在下面的 web api 方法中实现页码过滤器。我知道 'pagesize' 和 'take' 属性,但这仅允许我过滤记录数。
我希望能够显示所有记录,但通过 api/test?name=frs&page=2 等页面数传播数据
请提供一些帮助/指南,了解如何进一步开始执行此任务,谢谢。
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 });
}
【问题讨论】:
-
“我希望能够显示所有记录,但在页面之间递增。”什么?如此不清楚,这让我想投反对票
-
对于没有明确解释的道歉,我已经编辑了上述声明,以澄清我的目标。如果可能,请进一步提供建议。谢谢
-
您的更新仍然没有意义。你是想说如果有人通过第 2 页,你想返回第 1 页和 2?
-
@user3070072 这仍然有些不清楚。从您的网址来看,您似乎只是在尝试进行普通的分页。如果这就是您所要求的,那么您就可以很好地用文字隐藏您的意图...另外,如果您要问如何使分页清楚地起作用,则您必须做功课,而不是在 SO 上问它
-
如果查询返回 20 条数据记录,我希望每个页面显示 10 行记录,因此如果我调用
api/test?name=frs&page=1,将显示查询的前 10 条记录,如果我查询api/test?name=frs&page=2,页面将显示第二组 10 条记录。我希望我已经清楚地澄清了分页问题,如果没有,请告诉我。感谢您的回复。
标签: c# asp.net-mvc asp.net-web-api pagination