使用 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 并执行查询返回结果,此时才会计算数据的总记录数。