C#实体框架排序和分页产生意外结果

C#实体框架排序和分页产生意外结果,c#,.net,entity-framework,C#,.net,Entity Framework,当我将实体框架与OrderBy和Skip和Take一起使用时,存在重复记录,并且一些记录不显示 代码如下: jobs = context.Jobs.Include("Company"). OrderBy(x => x.Company.Name). Skip((page - 1) * PageSize). Take(PageSize).ToList(); 但是,如果我按一些作业属性(如x=>x.

当我将实体框架与
OrderBy
Skip
Take
一起使用时,存在重复记录,并且一些记录不显示

代码如下:

jobs = context.Jobs.Include("Company").
                OrderBy(x => x.Company.Name).
                Skip((page - 1) * PageSize).
                Take(PageSize).ToList();
但是,如果我按一些
作业
属性(如
x=>x.Title
)排序,则不会出现任何问题。问题仅在与作业的某些相关实体排序时出现。在我的代码
工作中
公司
有一对多的关系

请帮忙


谢谢

您的查询没有完全定义结果行的顺序

假设我们有一张桌子:

Id Name
1  Bar
2  Foo
3  Bar
名称
排序时,可能会出现以下结果集:

Id Name
1  Bar
3  Bar
2  Foo

每次调用都可能返回任何一个集合,因此,如果页面大小
1
可能会得到如下奇怪结果:

Id Name
1  Bar // 1st set
1  Bar // 2nd set
2  Foo // 1st set
在密钥中添加一些独特的属性(大多数情况下为PK)将修复此行为

给定键
名称,Id
只有一个可能的结果:

Id Name
1  Bar
3  Bar
2  Foo
因此,您的查询应该如下所示(假设
JobId
是PK):


您的查询没有完全定义结果行的顺序

假设我们有一张桌子:

Id Name
1  Bar
2  Foo
3  Bar
名称
排序时,可能会出现以下结果集:

Id Name
1  Bar
3  Bar
2  Foo

每次调用都可能返回任何一个集合,因此,如果页面大小
1
可能会得到如下奇怪结果:

Id Name
1  Bar // 1st set
1  Bar // 2nd set
2  Foo // 1st set
在密钥中添加一些独特的属性(大多数情况下为PK)将修复此行为

给定键
名称,Id
只有一个可能的结果:

Id Name
1  Bar
3  Bar
2  Foo
因此,您的查询应该如下所示(假设
JobId
是PK):


谢谢它解决了这个问题。但为什么按职位排序结果是正确的,而按职位相关实体(如公司)排序结果是错误的。姓名?谢谢。它解决了这个问题。但为什么按职位排序的结果是正确的,而按职位相关实体(如公司名称)排序的结果是错误的?