分页支持 - ADO.NET 实体框架和 LINQ

问题描述 投票:0回答:3

通过 ADO.NET EF 和 LINQ 提供什么样的分页支持?

“前 10 个”选择是什么样的?

“下一个 10”选择?

.net entity-framework linq pagination ado.net
3个回答
11
投票

正如其他人在这里所解释的, Take() 和 Skip() 就是您所需要的。

他们会剪切结果集以获得你想要的页面。

您必须以某种方式维护 PageIndex 和 PageSize 信息,以便在运行查询时可以传递它们。 例如,如果您的数据访问是通过 Web 服务完成的,您将在过滤条件的同时传递索引/大小,并在客户端(应用程序或页面,如果是网站)中维护这些值。

没有开箱即用的“用于分页的有状态迭代器”,如果这就是您正在寻找的......

此外,如果您正在实现“标准分页”构造,则需要在限制查询之前获取记录总数,您可以这样做,假设您的函数以某种方式获取 PageSize 和 PageIndex 作为参数:

var query = ...your normal query here...
int totalRecordCount = query.Count();
var pagedQuery = query.Skip(PageIndex*PageSize).Take(PageSize);

8
投票

Take 关键字用于决定如何 需要获取许多记录。一个 Take 关键字的简单示例是 下面提供。

列出客户 = 获取客户列表();

var first3Customers = (
            from c in customers

            select new {c.CustomerID, c.CustomerName} )
            .Take(4);

这里我们取前 4 个 客户获取所提供的清单。

我们还可以使用 where 子句 首先缩小列表范围,然后 拿4个。

var first3Customers = (
            from c in customers
           where c.Region == "Kol"

            select new {c.CustomerID, c.CustomerName} )
            .Take(4);

但是如果我们想得到 第 4 条和第 8 条记录之间的数据。在 在这种情况下我们使用skip关键字 跳过记录数(从顶部开始) 我们不想要。这是一个例子 使用 Skip 关键字。

var first3Customers = (
            from c in customers
           where c.Region == "Kol"

            select new {c.CustomerID, c.CustomerName} )
            .Skip(3).Take(4);

更多这里


0
投票

如果您的 Visual Studio 中有可用的 nuget,您可以添加

PagedList
包。

看看 asp.net 上的链接

© www.soinside.com 2019 - 2024. All rights reserved.