C# 使用LINQ分页而不进行排序

C# 使用LINQ分页而不进行排序,c#,.net,linq,entity-framework,C#,.net,Linq,Entity Framework,我想用LINQ to entity(EF)创建分页,我找到了Skip方法,但它只支持排序输入,所以我认为在大量行中它会很慢。有没有不先排序就进行分页的方法?对于特定的SQL查询,数据库没有义务在不声明特定顺序的情况下以相同的顺序返回记录集 您可以运行相同的查询,并且每次运行时前10条记录可能不同。数据库将根据对自身最有利的情况执行此操作(数据的哪些部分缓存在内存中,在两次执行同一查询之前更改了哪些部分等等) 因此,无论使用什么ORM,都必须指定数据的顺序。并确保您有一个正确定义的字段索引,根据该

我想用LINQ to entity(EF)创建分页,我找到了
Skip
方法,但它只支持排序输入,所以我认为在大量行中它会很慢。有没有不先排序就进行分页的方法?

对于特定的SQL查询,数据库没有义务在不声明特定顺序的情况下以相同的顺序返回记录集

您可以运行相同的查询,并且每次运行时前10条记录可能不同。数据库将根据对自身最有利的情况执行此操作(数据的哪些部分缓存在内存中,在两次执行同一查询之前更改了哪些部分等等)


因此,无论使用什么ORM,都必须指定数据的顺序。并确保您有一个正确定义的字段索引,根据该索引对记录进行排序。

Skip
可与任何
IEnumerable
一起使用。您是否使用某种ORM将Linq查询转换为SQL?@p.s.w.g是的,我忘了将其添加到标记中。如果您有PK,请排序。通常,底层RDBMS可以有效地执行此操作。不幸的是,您必须对其进行排序:(如果在EF中使用
Skip
方法而不使用
OrderBy
您将遇到下一个异常:
方法'Skip'仅支持LINQ to实体中的排序输入。方法'OrderBy'必须在方法'Skip'之前调用。
现在我应该首先排序,我担心此方法的性能:
context.Users.Where(u=>u.Id!=currentUserId)。选择(u=>u)。OrderBy(u=>u.Id)。跳过((第1页)*每页)。获取(每页);
我认为
。这里不需要选择(u=>u)
;是的;这基本上是得到你想要的东西应该做的。因为它是
Id
我想这是你的主键,所以我认为你的表现应该不会那么差。