我可能是错的,但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