MVC贡献Pager问题 - 迅速
-
30-09-2019 - |
题
我可能是错的,但是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个语句?这有助于澄清吗?
不隶属于 StackOverflow