我可能是错的,但是Aspagination方法不是很效率,因为它会吸收从存储库中的所有数据到初始化的整体等?因此,分页不用于使数据访问更有效。

我没有找到任何使用存储库和“ true”的示例(即在ATCUAL SQL中使用顶部等)。如果我有具有此签名的存储库方法,该如何使用Pager:

iList getData(int?page,out int altteritems)

任何反馈都将不胜感激。谢谢。

基督教

有帮助吗?

解决方案

您可以使用 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) %>

其他提示

我认为您可能会误导您对分页效率的假设?尝试查看Profiler中的执行SQL-它执行两个SQL语句 - 一个用于检索计数,一个选择顶部10。下面是从Profiler中执行的SQL的结果 -

此SQL检索获取计数 - Pager使用:

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()over以及第二个SQL脚本中的20个语句?这有助于澄清吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top