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 メソッドの仕組みはわかりませんが、SkipメソッドとTakeメソッドを使用しています。したがって、すべてのフィルタリングが完了すると、コードは次のようになります。

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

この単純なメソッドは、実際に必要な行のみを返します。

于 2012-06-28T15:54:16.917 に答える