当所有记录具有相同的值时,如何在linq中发生OrderBy?

时间:2016-06-22 08:55:43

标签: c# sql-server entity-framework linq

datetime上的orderBy具有相同的值时,我会在linqsql的不同匹配中获得不同的结果。

让我们说大约15条记录的日期时间与其中一条记录相同 如果那些15条记录的分页和每页的限制在我的情况下是10,那么说第1页的第1页有10条记录。然后第2页我没有得到剩余的5条记录,但是有5条记录来自第1页的前10条记录。

问题:

  1. 这个orderBy和skip and take函数的工作方式和

  2. 为什么结果出现这种差异?

2 个答案:

答案 0 :(得分:1)

LINQ不会对如何应用对基础数据源的排序起作用。 Linq本身只是一个枚举扩展。根据您对问题的评论,您询问MSSQL如何在查询中应用排序。

在MSSQL(以及大多数其他RDBMS)中,相同值的排序取决于RDBMS的底层实现和配置。这些值的有序结果可以被视为随机的,并且可以在相同的查询之间改变。这并不意味着您会看到差异,但您不能依赖于按特定顺序返回的数据。

之前已经在SO here上询问并回答了这个问题。

community addon comments in this MSDN article中也对此进行了描述。

答案 1 :(得分:1)

除ORDER BY子句中指定的顺序外,不会应用任何顺序。如果所有行都具有相同的值,则可以按最快的顺序返回它们。当并行执行查询时,这一点尤其明显。

这意味着您无法对非唯一值排序的结果使用分页。每次拨打电话时,订单都可以更改。

在这种情况下,您需要添加确定唯一排序值的tie-breaker列,例如产品的ID ORDER BY Date, ProductID