首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mvc contrib pager问题- AsPagination

mvc contrib pager问题- AsPagination
EN

Stack Overflow用户
提问于 2011-01-07 23:02:18
回答 2查看 1.5K关注 0票数 2

我可能错了,但是AsPagination方法是不是效率不是很低,因为它首先从存储库中提取所有数据来初始化TotalItems等等?因此,分页并不是为了提高数据访问效率。

我还没有找到任何使用存储库和'true‘分页的例子(例如,在atcual SQL中使用TOP等)。如果我有一个带有此签名的存储库方法,如何使用寻呼机:

IList GetData(int?页面,输出整型TotalItems)

任何反馈都将非常感谢。谢谢。

克里斯蒂安

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-08 16:28:42

您可以使用MVCContrib中的CustomPagination类,如下所示:

代码语言:javascript
复制
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);
}

在你的视图中:

代码语言:javascript
复制
<%= Html.Pager(Model) %>
票数 6
EN

Stack Overflow用户

发布于 2011-01-12 20:01:37

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

此sql检索获取分页程序使用的计数:

代码语言:javascript
复制
SELECT [GroupBy1].[A1] AS [C1]
FROM ( SELECT 
   COUNT(1) AS [A1]
   FROM [dbo].[Customer] AS [Extent1]
)
AS [GroupBy1]

而以下是用于检索数据的sql:

代码语言:javascript
复制
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语句了吗?这有助于澄清吗?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4626813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档