c# - 计算有多少项目出现在具有特定 ID 的项目之前

标签 c# .net entity-framework linq 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 : ""));

如果没有更好的方法来做到这一点,那也没关系。我只是希望存在,因为我确信 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/

相关文章:

java - 确保 Type 实例代表可从某个类分配的类型

c# - 调整数组大小会调用 GC 吗?

.net - "Could not establish trust relationship for the SSL/TLS secure channel"具有有效证书

c# - 将验证附加到 MVC Controller / View 中使用的 EF 对象?

c# - 如果我使用基类定义键会出错

c# - 从 C# 运行时 SQL 查询超时,在 SQL Server Management Studio 中运行速度很快

c# - 可以赋值null吗?

c# - 如何在 Visual Studio 2019 中创建 .NET Framework 4.6 版本的 XUnit 项目?

c# - 如何在 DropDownFor 的 SelectList 中设置所选项目?

entity-framework - 如何让所有实体访问 :internal instead of public in EDMX?