2012-06-28 3 views
0

Я запрашиваю данные из нашего IBM i и отображаю их в сетке. Цель отображения всех записей по нескольким причинам:Как повысить скорость запроса на выгружаемой сетке с большим количеством результатов?

  1. Существующее программное обеспечение не используется должным образом, и люди не закрывают предметы. (проблема пользователя/обучения да, но см. другие элементы). Таким образом, сужение списка до открытых позиций неточно.
  2. Это позволяет пользователю запрашивать всю историю (это свойство на основе и история может быть важным)

Тем не менее, в настоящее время 28000 пунктов и будет когда-либо увеличиваться. Прямо сейчас, я использую сетку 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); 
    } 

Что вы предлагаете мне по-другому, чтобы улучшить скорость отображения? По крайней мере, для последующих просмотров.

+0

[CodingHorror: The End of Pagination] (http://www.codinghorror.com/blog/2012/03/the-end-of-pagination.html) – jamesallman

ответ

0

Я не знаю, как работает метод AsPagination, но мы используем Пропустить и Возьмите методы. Так ведь фильтрация выполняется ваш код может выглядеть следующим образом:

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

Этот простой метод возвращает только те строки, которые мы actualy потребности.