我可能是錯的,但AsPagination方法效率不是很低,因爲它首先吸收存儲庫中的所有數據以初始化TotalItems等。因此不使用分頁來提高數據訪問效率。mvc contrib pager問題 - AsPagination
我還沒有找到任何使用存儲庫和'真正'分頁的例子(即在常用SQL中使用TOP等)。如何使用尋呼機,如果我有一個庫方法與此簽名:
的IList的GetData(INT頁,OUT INT TOTALITEMS?)
任何反饋將是非常讚賞。謝謝。
基督教
我可能是錯的,但AsPagination方法效率不是很低,因爲它首先吸收存儲庫中的所有數據以初始化TotalItems等。因此不使用分頁來提高數據訪問效率。mvc contrib pager問題 - AsPagination
我還沒有找到任何使用存儲庫和'真正'分頁的例子(即在常用SQL中使用TOP等)。如何使用尋呼機,如果我有一個庫方法與此簽名:
的IList的GetData(INT頁,OUT 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名。下面是來自profiler執行的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(,並且其中... >第二個sql腳本中有20條語句?這有助於澄清?
我想這取決於你的數據訪問如何工作。但我見過很多這樣的例子:repository.GetAll()。AsPagination(page ?? 1,10);所以我想說的是,他們得到的所有數據,然後切片/頁面是非常低效的。但是,使用自定義分頁我可以很容易地建立一個依賴關係(就頁碼而言)。 – cs0815 2011-01-13 08:58:30
非常感謝!將在星期一嘗試。 – cs0815 2011-01-08 08:40:29