我有一个PredicateBuilder
表达式,它返回一个IQueryable
这样的(人为的例子):
var predicate = PredicateBuilder.True<CoolEntity>();
predicate = predicate.And(x => x.id > 0);
IQueryable<CoolEntity> results = CoolEntityRepository
.FindBy(predicate)
.OrderByDescending(x => x.id);
然后我使用它来生成一个分页列表,其中只包含给定页面的结果,使用 MVC 索引控制器来处理CoolEntity
实体,如下所示:
int total = results.Count(); //Used by my controller to show the total number of results
int pageNumber = 2;
int pagesize = 20;
//Only get the entities we need for page 2, where there are 20 results per page
List<CoolEntity> resultList = results
.Skip(pageNumber * pageSize)
.Take(pageSize)
.ToList()
此查询确保每个页面只返回相关结果,因为通过存储库从 SQL 数据库返回了数千条记录。它一直运行良好。
问题是,我现在希望能够找出我需要为特定实体返回的索引的哪些分页页面。例如,假设我的 CoolEntity 对象之一的 ID 为 5 -pageNumber
如果我想为我的 Index 控制器加载该实体所在的分页页面,我如何确定该值需要是什么?
具体来说,我怎样才能发现对于results
,ID 为 5 的实体是第 651 行,并因此使用这个数字来确定pageNumber
(即Math.Ceiling(651/pagesize)
或类似的东西)?有更好的方法吗?