分页时获取总记录数

问题描述 投票:0回答:2

要从数据库获取页面,我必须执行如下操作:

var cs = ( from x in base.EntityDataContext.Corporates
   select x ).Skip( 10 ).Take( 10 );

这将跳过前 10 行并选择接下来的 10 行。

如何知道没有分页的查询会产生多少行?我不想运行另一个查询来获取计数。

pagination linq-to-sql
2个回答
35
投票

要在跳过/获取之前获取记录总数,您必须运行单独的查询。 获取返回的实际数字将使用 Count(),但如果原始查询已具体化,则不会导致另一个查询。

var q = from x in base.EntityDataContext.Corporates 
        select x;

var total = q.Count();
var cs = q.Skip(10).Take(10);
var numberOnSelectedPage = cs.Count();

20
投票

底线:您必须运行两个查询。你根本无法绕过它。

不过,这里有一个好方法,可以缓存原始 LINQ 查询和筛选器,从而减少复制/粘贴错误:

var qry = from x in base.EntityDataContext.Coporates select x;
var count = qry.Count();
var items = qry.Skip(10).Take(10).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.