使用 Segment 分页查询


  Segment 方法用于分页查询数据。它的实现原理和 Take、Skip 组合一样,但是使用 Segment 查询时, DataPaper 能提返回更多的信息,比如数据总数,这是计算总页码所必须的信息之一。

[TestMethod]
public void TestPaging()
{
    using (var db = new DbContext())
    {
        var pager = new DataPager(50, 2);
        var products = db.Products.Segment(pager).ToList();
        Assert.AreEqual(77, pager.RecordCount);
        Assert.AreEqual(2, pager.PageCount); // 77 / 50 余数加1
    }
}

  注意,在获取 DataPager 对象的总记录数、总页数时,应当对查询进行 ToList / ToListAsync、ToArray / ToArrayAsync、ToDDictionary / ToDictionaryAsync 等操作,否则将无法取到总记录数、总页码数。原因很简单,IQueryable<T> 只有在遍列(即调用 GetEnumerator)的时候才会解析 SQL 并执行查询返回结果,此时才会计算数据的总记录数。