LINQ:分页技术,使用take和skip但是也需要总记录 – 如何实现这个?

我已经使用skip和take实现了一个分页例程。 它工作得很好,但在调用Take和Skip之前我需要表中的记录总数。

我知道我可以提交2个单独的查询。

  1. 得到数数
  2. 跳过并采取

但我宁愿不发出2次LINQ调用。

如何在同一查询中返回它(例如使用嵌套的select语句)?

以前,我在存储过程中使用了分页技术。 我使用临时表返回了项目,并将计数传递给输出参数。

对不起,但你做不到。 至少,不是一个漂亮的方式。

你可以用不合适的方式做到这一点,但我认为你并不喜欢这样:

var query = from e in db.Entities where etc etc etc; var pagedQuery = from e in query.Skip(pageSize * pageNumber).Take(pageSize) select new { Count = query.Count(), Entity = e }; 

你看? 根本不漂亮。

没有理由进行两个单独的查询甚至存储过程。 使用let绑定来记录子查询完成后,您可以使用包含所选项目和总计数的匿名类型。 对数据库的单个查询,1个linq表达式和你完成的。 获取值为jobQuery.Select(x => x.item)或jobQuery.FirstOrDefault()。计数

让表达是一件令人惊奇的事情。

 var jobQuery = ( from job in jc.Jobs let jobCount = ( from j in jc.Jobs where j.CustomerNumber.Equals(CustomerNumber) select j ).Count() where job.CustomerNumber.Equals(CustomerNumber) select new { item = job.OrderBy(x => x.FieldName).Skip(0).Take(100), Count = jobCount } );