在进行分页时获取记录总数

eff*_*kay 12 paging linq-to-sql

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

var cs = ( from x in base.EntityDataContext.Corporates
   select x ).Skip( 10 ).Take( 10 );
Run Code Online (Sandbox Code Playgroud)

这将跳过前10行,并将选择下一行10.

由于没有分页的查询,我怎么知道会产生多少行?我不想运行另一个查询来获取计数.

tva*_*son 21

要在跳过/获取之前获取记录总数,您必须运行单独的查询.获取返回的实际数字将使用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();
Run Code Online (Sandbox Code Playgroud)


Ran*_*pho 12

底线:您必须运行两个查询.你根本无法解决它.

但是,这是一种很好的方法,可以缓存原始LINQ查询和过滤器,从而减少复制/粘贴错误:

var qry = from x in base.EntityDataContext.Coporates select x;
var count = qry.Count();
var items = qry.Skip(10).Take(10).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 不,q.Count()将生成一个SQL`ELEL COUNT(*)`查询. (4认同)
  • 不.调用q.Count()将导致SQL沿着`SELECT count(*)where ...`行,这将只返回一个整数值.没有记录将被加载到内存中. (4认同)