Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算在具有特定ID的项目之前显示的项目数_C#_.net_Entity Framework_Linq_Entity Framework 6 - Fatal编程技术网

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

C# 计算在具有特定ID的项目之前显示的项目数,c#,.net,entity-framework,linq,entity-framework-6,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 ==

我有这个项目,我需要做的任务之一就是找到特定对象出现在哪个页面上。对象具有预定义的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可以花一段时间,当我在数据库中有数千个项目时

注意:这种方法目前似乎很有效。

试试类似的方法

int itemCount = masterDbContext.Items.FindIndex(x => (x.Id == given_ID));

你差点就成功了。由于您是按ID订购项目,并计算其中ID小于一个数字的项目的数量,因此您可以在计数中使用该条件:


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

假设它使用某种形式的SQL提供程序,您所要做的一切与SQL中的类似:

SELECT COUNT([Id])
FROM [Items]
WHERE [Id] < @currentItemId
林奇:

masterDbContext.Items.Count(item => item.Id < currentItemId);

你为什么在这里需要GroupBy?wont masterDbContext.Items.Countx=>x.IdmasterDbContext.Items.Count(item => item.Id < currentItemId);