c# - 服务器端分页和排序最佳实践?

标签 c# jquery asp.net-mvc-2 jqgrid jqgrid-asp.net

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

最佳答案

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

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

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

关于c# - 服务器端分页和排序最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12531660/

相关文章:

c# - 在 CultureInfo 中获取当前语言

c# - 我可以并行化 10 毫秒以下的微小任务吗? (例如矩阵求逆)

javascript - AngularJS - 如何仅对多个事件的组合采取行动

c# - 使用 asp.net listview 删除 SweetAlert 确认对话框?

c# - ASP.NET MVC 2 中的意外 Html.EditorFor 行为

asp.net-mvc-2 - 如何在 MVC Html.ActionLink 中使用 mailto?

asp.net-mvc-2 - SSL 443端口冲突,如何让iis7.5不认为有其他进程在运行?

c# - 在本地商店找不到证书

c# - 使用 System.Drawing.Imaging; System.Drawing中不存在Imaging

javascript - 从事件中获取表单数据