我有这个项目,我需要做的任务之一是查找特定对象出现在哪个页面上。该对象具有预定义的ID,并且该ID按从0到N的顺序出现,但它们可能会跳过值。计算在具有特定ID的项目之前出现多少项目
这意味着,显然,使用我正在寻找的元素的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
在数据库中。
请注意:此方法目前的工作似乎。
为什么你需要'GroupBy'在这里?不会'masterDbContext.Items.Count(x => x.Id
ieaglle
@ieaglle完美的工作! –
我几乎可以肯定的是,两个版本都产生完全相同的SQL代码。所以这只是一个代码可读性优化,而不是性能。 – ieaglle