6

我正在使用以下方法来获取我的 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);
}​
4

2 回答 2

3

看起来您正在从服务 (_service) 返回所有数据,然后对结果进行分页。此外,看起来您每次发出寻呼请求时都会发出相同的请求。如果属实,那么我认为这是低效的。

您的服务 (_service) 应该处理 Take 和 Skip 功能(作为参数传递),从而减少通过网络获取和发送的记录数量。您没有发布 GetSomeData(id) 方法的代码。它是返回 IEnumerable 还是 IQueryable?这也将对性能/效率产生影响。

我希望我没有误解您的代码或问题。

于 2012-09-21T14:03:06.323 回答
1

您的主要问题是您将结果分配给_service.GetSomeData(id)to List<SomeEntity>。无论如何,您应该使用ObjectQuery<SomeEntity>IQueryable<SomeEntity>(取决于使用的数据库技术)能够在 SQL Server 端使用排序和配对。您当前的代码只是获取所有数据,然后对其进行排序并在下一条语句中获取所需的页面。我可以建议您查看答案中的代码另一个答案中的最新代码,更多示例如何为 jqGrid 实现数据的排序、分页和过滤。

于 2012-09-21T14:12:08.877 回答