【发布时间】:2013-08-30 00:22:23
【问题描述】:
我使用此代码在 asp.net 中分页 Listview 控件。
Paging ListView With DataPager
但我想使用 skip 和 take 来分页 Listview。
我搜索了很多,但没有找到正确的答案
【问题讨论】:
-
你想做什么?
标签: c# asp.net linq listview datapager
我使用此代码在 asp.net 中分页 Listview 控件。
Paging ListView With DataPager
但我想使用 skip 和 take 来分页 Listview。
我搜索了很多,但没有找到正确的答案
【问题讨论】:
标签: c# asp.net linq listview datapager
要进行真正的自定义分页,您只能获取将在当前页面上显示的确切记录,那么您将需要使用某种形式的 LINQ 提供程序(LINQ to SQL、LINQ to Entities 等),因为.Skip() 和 .Take() 方法将无法提供自定义分页上下文,而无法影响从数据库中检索数据的查询。
也就是说,.Skip() 和.Take() 对所有页面的总记录的整个列表的分页能力在作为 LINQ to Objects 应用时会显着减弱,因为它不能只提供一个单页数据。
简而言之,您需要决定要使用哪种 LINQ to XYZ 风格的数据库功能,以允许 .Skip() 和 .Take() 代表您真正执行高效的自定义分页。
如果您决定使用 LINQ to SQL,那么您应该查看 LinqDataSource class,特别是 AutoPage property,因为这是您正在寻找的 .Skip() 和 .Take() 功能的内置使用.
【讨论】:
IEnumerable 对象,而 LINQ to XYZ 风格适用于 IQueryable 对象。不同之处在于 IQueryable 是由 LINQ 提供程序解析的数据,例如 LINQ to SQL 采用 IQueryable 数据并将其解析为 T-SQL 语句。使用.Skip() 和.Take() 的LINQ to Objects 可以提供类似分页的自定义体验,但前提是整个IEnumerable 集合都在内存中,这对于庞大的数据集(想想数据库表中的100,000 行)通常是情况并非如此,即使它是一个巨大的资源猪。