Проблема в том, что использование OrderBy с одним логическим свойством не обеспечивает полного упорядочивания результатов.Вместо этого он делит результаты на две половины с неопределенным упорядочением по двум половинам.Так, например, если у вас есть сущность со свойствами Id, Name и IsRecommended и вы просто заказываете по IsRecommended, то вы можете получить такой порядок:
Id Name IsRecommended
4 A true
3 B true
1 C true
2 D false
5 E false
Но вы также можете получить
Id Name IsRecommended
3 B true
1 C true
4 A true
5 E false
2 D false
Или любой другой порядок, в котором все рекомендуемые объекты идут первыми.
Но для правильной работы Skip и Take в LINQ to Entities (и во многих других реализациях LINQ) порядок строк должен бытьполностью определяется.Вот почему изменение, которое вы указали в своем комментарии, появилось, чтобы исправить проблему.Однако проблема может быть не решена, если комбинация свойств, которые вы сортируете, не гарантируется как уникальная.
Один из способов убедиться, что вы получите полностью определенный заказ, - это использовать основнойключ как вторичное свойство для заказа по.Если снова взять приведенный выше пример, это всегда приведет к следующему порядку:
Id Name IsRecommended
1 C true
3 B true
4 A true
2 D false
5 E false
, а Skip and Take будет работать последовательно.