计算在具有特定ID的项目之前显示的项目数

410*_*one 7 .net c# linq entity-framework entity-framework-6

我有这个项目,我需要做的任务之一就是找到特定对象出现在哪个页面上.该对象具有预定义的ID,ID的显示顺序从0到N,但它们可能会跳过值.

显然,这意味着使用我正在寻找的元素的ID将不起作用,就像它是25,并且每页应该有10个项目,但是其中8个项目缺失,它会尝试适合第3页,但只适合第2页.

这就是我现在所拥有的,我想知道是否有更好的方法:

int itemsPerPage = Convert.ToInt32(masterDbContext.Settings.First(x => x.Name == "ItemsPerPage").Value);
int itemCount = masterDbContext.Items.OrderBy(x => x.Id).TakeWhile(x => x.Id < currentItemId).Count();
int pageNumber = (int)Math.Ceiling((double)itemCount / itemsPerPage);

Response.Redirect("~/View/" + rootItem.Id + (pageNumber > 1 ? "/Page/" + pageNumber : ""));
Run Code Online (Sandbox Code Playgroud)

如果没有更好的方法来做到这一点,那很好.我只是希望有,因为我确信TakeWhile,当我Items在数据库中拥有数千个时,可以花一些时间.

请注意:此方法目前似乎有效.

vit*_*ore 4

你几乎已经拥有了。由于您是按 ID 订购商品并计算 ID 小于数字的商品数量,因此您可以在以下位置使用该条件Count

 var itemsPerPage = Convert.ToInt32(masterDbContext.Settings.First(x => x.Name == "ItemsPerPage").Value); 
 var itemCount = masterDbContext.Items.Count(x => x.Id < currentItemId);
Run Code Online (Sandbox Code Playgroud)

此外,LINQ 扩展方法没有直接的 SQL 匹配TakeWhile。因此,当您希望将 LINQ 查询转换为 SQL 时,最好不要使用它