我有这个项目,我需要做的任务之一是找到特定对象出现在哪个页面上。该对象具有预定义的 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 : ""));
如果没有更好的方法来做到这一点,那也没关系。我只是希望存在,因为我确信 TakeWhile
可以在我有数千个 Items
数据库。
请注意:此方法目前似乎有效。
最佳答案
你几乎拥有它。由于您按 ID 订购商品并计算 ID 小于数字的商品数量,因此您可以在 Count
中使用该条件:
var itemsPerPage = Convert.ToInt32(masterDbContext.Settings.First(x => x.Name == "ItemsPerPage").Value);
var itemCount = masterDbContext.Items.Count(x => x.Id < currentItemId);
TakeWhile
LINQ 扩展方法也没有直接的 SQL 匹配。因此,当您希望将 LINQ 查询转换为 SQL 时,最好不要使用它
关于c# - 计算有多少项目出现在具有特定 ID 的项目之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32908711/