0

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

  1. 现有软件没有正确使用,人们没有关闭这些项目。(用户/培训问题是的,但请参阅其他项目)。因此,将列表缩小到仅打开项目是不准确的。
  2. 它允许用户查询所有历史记录(这是基于属性的,历史记录可能很重要)

但是,目前有 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);
    }

你会建议我做些什么来提高显示速度?至少对于后续的观点。

4

1 回答 1

0

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

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

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

于 2012-06-28T15:54:16.917 回答