我可能错了,但是AsPagination方法是不是效率不是很低,因为它首先从存储库中提取所有数据来初始化TotalItems等等?因此,分页并不是为了提高数据访问效率。
我还没有找到任何使用存储库和'true‘分页的例子(例如,在atcual SQL中使用TOP等)。如果我有一个带有此签名的存储库方法,如何使用寻呼机:
IList GetData(int?页面,输出整型TotalItems)
任何反馈都将非常感谢。谢谢。
克里斯蒂安
发布于 2011-01-08 16:28:42
您可以使用MVCContrib中的CustomPagination类,如下所示:
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) %>发布于 2011-01-12 20:01:37
我认为您对分页效率的假设可能被误导了?尝试查看profiler中执行的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注意到第二个sql脚本中的TOP(10)、row_number() over和where ... > 20语句了吗?这有助于澄清吗?
https://stackoverflow.com/questions/4626813
复制相似问题