4

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

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

“下一个 10”选择?

4

3 回答 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);
于 2009-04-21T16:49:52.480 回答
8

Take 关键字用于决定要获取多少条记录。下面提供了 Take 关键字的一个简单示例。

列出客户 = GetCustomerList();

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);

更多在这里

于 2009-04-21T16:42:02.407 回答
0

如果您的 Visual Studio 中有可用的 nuget,则可以添加PagedList包。

在 asp.net上查看此链接

于 2013-01-09T13:41:45.147 回答