使用OrderBy,Take和Skip的实体框架可能会给出不正确的结果

时间:2018-02-07 19:00:54

标签: entity-framework

所以我想从查询中返回分页数据:

var data = context.MyTable.OrderByDescending(r => r.Field1)
          .Skip(10)
          .Take(10)

这将通过Field1

为我提供10行的第二页

但是假设表中的所有行都具有相同的Field1值,Skip / Take返回的数据不正确。我已经看到第二页可能包含已在第1页中返回的行的位置。

请注意使用EF 6.1.3

1 个答案:

答案 0 :(得分:0)

为了得到正确的结果,我需要确保订购,产生一个独特的数据顺序。所以我在OrderBy中添加了另一列,即表的唯一ID。

var data = context.MyTable.OrderByDescending(r => r.Field1).ThenBy(r => r.FieldId)
      .Skip(10)
      .Take(10)

我没有找到任何确认我需要这样做的文件,或者这在EF中是否很重要?