質問

ことがございました間違ったものAsPaginationない方法で非常に非効率で吸い込みのすべてのデータからリポジトリの初initialise TotalItemsているか。でページングを使用していないのデータにアクセスをより効率的です。

私が見つからなかった場合の例を使用するリポジトリと'true'ページング(利用トップなど。のatcual SQL).の使い方を教えてくださいページャーをしている場合は、リポジトリ方法この署名:

IList GetData(int?ページは、int TotalItems)

フィードバックが非常によろしくお願いいたします。感謝。

キリスト教

役に立ちましたか?

解決

ご利用可能に CustomPagination<T> クラスの一部であるMVCContribようになります:

public ActionResult Index(int page)
{
    int totalItems;
    int pageSize = 10;
    var data = Repository.GetData(page, out totalItems);
    var paginatedData = new CustomPagination<Bla>(
        data, page, pageSize, totalItems
    );
    return View(paginatedData);
}

内見:

<%= Html.Pager(Model) %>

他のヒント

と思いますが誤送付の前提は、ページングす。うに実行sqlのプロファイラで実行し二つのsqlステートメント-一を取得するカウントを選択し、トップ10に入るのです。以下の結果を実行したsqlからプロファイラ-

このsqlを取得しますが、カウント利用のポケットベル:

SELECT [GroupBy1].[A1] AS [C1]
FROM ( SELECT 
   COUNT(1) AS [A1]
   FROM [dbo].[Customer] AS [Extent1]
)
AS [GroupBy1]

なので、sqlの取得に使用するデータ:

SELECT TOP (10) 
[Extent1].[CustomerId] AS [CustomerId], 
[Extent1].[FirstName] AS [FirstName], 
[Extent1].[LastName] AS [LastName],
...
FROM ( SELECT [Extent1].[CustomerId] AS [CustomerId], [Extent1].[FirstName] AS [FirstName], [Extent1].[LastName] AS [LastName], ..., row_number() OVER (ORDER BY [Extent1].[Company] ASC) AS [row_number]
    FROM [dbo].[Customer] AS [Extent1]
)  AS [Extent1]
WHERE [Extent1].[row_number] > 20
ORDER BY [Extent1].[Company] ASC

通知の上位(10),row_number()内には、...>20諸表のsqlスクリプト?なることを明確に?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top