当datetime
上的orderBy具有相同的值时,我会在linq
到sql
的不同匹配中获得不同的结果。
让我们说大约15条记录的日期时间与其中一条记录相同 如果那些15条记录的分页和每页的限制在我的情况下是10,那么说第1页的第1页有10条记录。然后第2页我没有得到剩余的5条记录,但是有5条记录来自第1页的前10条记录。
问题:
这个orderBy和skip and take函数的工作方式和
为什么结果出现这种差异?
答案 0 :(得分:1)
LINQ不会对如何应用对基础数据源的排序起作用。 Linq本身只是一个枚举扩展。根据您对问题的评论,您询问MSSQL如何在查询中应用排序。
在MSSQL(以及大多数其他RDBMS)中,相同值的排序取决于RDBMS的底层实现和配置。这些值的有序结果可以被视为随机的,并且可以在相同的查询之间改变。这并不意味着您会看到差异,但您不能依赖于按特定顺序返回的数据。
之前已经在SO here上询问并回答了这个问题。
答案 1 :(得分:1)
除ORDER BY子句中指定的顺序外,不会应用任何顺序。如果所有行都具有相同的值,则可以按最快的顺序返回它们。当并行执行查询时,这一点尤其明显。
这意味着您无法对非唯一值排序的结果使用分页。每次拨打电话时,订单都可以更改。
在这种情况下,您需要添加确定唯一排序值的tie-breaker列,例如产品的ID ORDER BY Date, ProductID