我使用以下方法为我的jqgrid子网格获取数据,并且它的工作完全正常。
请注意,此方法用于实现服务器端排序和分页。
现在我的查询就像你在行
中看到的那样 List<SomeEntity> myList = _service.GetSomeData(id);
这里进行数据库调用并获取所有记录。
所以我只是不太确定,所以我只是想知道这是否符合实施服务器端分页的最佳实践和
public JsonResult GetData(string folderId, string sidx, string sord, int page, int rows) {
int id = int.Parse(folderId);
List < SomeEntity > myList = _service.GetSomeData(id);
const int pageSize = 5;
// total
double totalPages = Math.Ceiling((double) myList.Count() / pageSize);
// sort
if (sord == "asc") {
myList = myList.OrderBy(m = > m.Name).ToList();
}
else {
myList = myList.OrderByDescending(m = > m.Name).ToList();
}
// paging
myList = myList.Skip((page - 1) * pageSize).Take(pageSize).ToList();
var jsonData = new {
total = totalPages, records = domainList.Count, page,
rows = myList
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
答案 0 :(得分:3)
看起来您正在从服务(_service)返回所有数据,然后分页结果。此外,看起来您每次发出寻呼请求时都会发出相同的请求。如果是真的,那么我认为这是低效的。
您的服务(_service)应处理Take和Skip功能(作为参数传递),从而减少通过线路获取和发送的记录数。您没有发布GetSomeData(id)方法的代码。是返回IEnumerable还是IQueryable?这也将对性能/效率产生影响。
我希望我没有误解你的代码或问题。
答案 1 :(得分:1)
您的主要问题是您将_service.GetSomeData(id)
的结果分配给List<SomeEntity>
。无论如何,您应该使用ObjectQuery<SomeEntity>
或IQueryable<SomeEntity>
(取决于使用的数据库技术),以便能够在SQL Server端使用进行排序和配对。您当前的代码只获取所有数据,然后对其进行排序并在下一个语句中获取所需的页面。我可以建议您查看来自the answer的代码或来自another answer的更新代码。更多示例如何为jqGrid实现数据的排序,分页和过滤。