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

发布于 2024-07-17 00:21:58 字数 89 浏览 6 评论 0原文

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

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

“下一个 10”选择?

What kind of paging support is offered through ADO.NET EF and LINQ?

What does a "first 10" Select look-like?

A "next 10" Select?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

何以心动 2024-07-24 00:21:58

正如其他人在这里所解释的, 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);

As the others have explained here, Take() and Skip() are what you need.

They will chop the result set to get you the page you want.

You have to maintain the PageIndex and PageSize information somehow so that you can pass them in when running your query.
If your data access is done through a web service for instance, you would pass the index/size in at the same time as your filtering criteria, maintaining those values in your client (application, or page if it is a website).

There is no "stateful iterator for paging" out of the box, if that is what you are looking for...

Moreover, if you are implementing a "standard paging" construct, you will need to get the total count of records before limiting your query, which you can do like that, assuming your function get PageSize and PageIndex as parameters somehow:

var query = ...your normal query here...
int totalRecordCount = query.Count();
var pagedQuery = query.Skip(PageIndex*PageSize).Take(PageSize);
浮生面具三千个 2024-07-24 00:21:58

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

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

var first3Customers = ( 
              来自客户中的c 

              选择新的 {c.CustomerID, c.CustomerName} ) 
              .采取(4); 
  

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

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

var first3Customers = ( 
              来自客户中的c 
             其中 c.Region == "Kol" 

              选择新的 {c.CustomerID, c.CustomerName} ) 
              .采取(4); 
  

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

var first3Customers = ( 
              来自客户中的c 
             其中 c.Region == "Kol" 

              选择新的 {c.CustomerID, c.CustomerName} ) 
              .跳过(3).采取(4); 
  

更多此处

The Take keyword is used to decide how
many records are to be fetched. A
simple example of the Take keyword is
provided below.

List customers =
GetCustomerList();

var first3Customers = (
            from c in customers

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

Here we are taking the first 4
customer for the list provided.

we can also use the where clause to
narrow down the list first and then
take 4 of them.

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

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

But what if we want to get the the
data between 4th and 8th record. In
this case we use the skip keyword to
skip the number of records(from top)
we don’t want. Here is the example of
using the Skip keyword.

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

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

More Here

影子的影子 2024-07-24 00:21:58

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

看看 此链接位于 asp.net

If you have nuget available in your Visual Studio, you could add PagedList package.

Have a look at this link at asp.net

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文