如何在具有大量结果的分页网格上提高查询速度?

时间:2012-06-28 15:33:55

标签: asp.net-mvc-3 ibm-midrange mvccontrib

我正从IBM i查询数据并将其显示在网格中。显示所有记录的目的有几个原因:

  1. 现有软件使用不当,人们没有关闭这些项目。 (用户/培训问题是,但请参阅其他项目)。因此,缩小列表以仅打开项目是不准确的。
  2. 它允许用户查询所有历史记录(这是基于属性的,历史记录可能很重要)
  3. 然而,目前有28,000件物品并且将会增加。现在,我正在使用MvcContrib网格。这是我的代码:

        public ActionResult Index(GridSortOptions gridSortOptions, int? page, int? filterPropertyUniqueKey, int? filterPermitNumber)
        {
            #region Filter and Sort
            var permits = buildingPermitRepository.GetOpenPermits();
    
            // Set default sort and apply filters
            if (filterPermitNumber.HasValue)
            {
                permits = permits.Where(w => w.PermitId == filterPermitNumber.Value);
            }
    
            // TODO add more filters
    
            if (String.IsNullOrEmpty(gridSortOptions.Column))
            {
                gridSortOptions.Column = "DateApplied";
                gridSortOptions.Direction = SortDirection.Descending;
            }
    
            var permitsPagedList = permits.OrderBy(gridSortOptions.Column, gridSortOptions.Direction).AsPagination(page ?? 1, 20);
            #endregion
    
            var viewModel = new PermitIndexViewModel
            {
                BuildingPermits = permitsPagedList,
                GridSortOptions = gridSortOptions
            };
    
            return View(viewModel);
        }
    

    您建议我采取哪些措施来提高显示速度?至少对于后续观点。

1 个答案:

答案 0 :(得分:0)

我不知道AsPagination方法是如何工作的,但我们使用 Skip Take 方法。 所以在完成所有过滤后,您的代码可能如下所示:

var permitsPagedList = permits.OrderBy(gridSortOptions.Column, gridSortOptions.Direction).Skip(pageSize * (page -1)).Take(pageSize).ToList();

这个简单的方法只返回我们实际需要的那些行。