【问题标题】:Paging Support - ADO.NET Entitry Framework and LINQ分页支持 - ADO.NET 实体框架和 LINQ
【发布时间】:2009-04-21 16:37:46
【问题描述】:

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

“前 10 个”选择看起来像什么?

“下一个 10”选择?

【问题讨论】:

    标签: .net linq entity-framework ado.net paging


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      更多Here

      【讨论】:

        【解决方案3】:

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

        看看this link at asp.net

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多