Это потому, что значения LastChange одинаковы для нескольких записей?
Да. Ни c #, ни база данных не будут пытаться отсортировать результаты после сортировки LastChange, поэтому для любых одинаковых значений LastChange строки в этом наборе могут быть в любом порядке, согласованности не будет - однажды они будут порядок будет таким, и позже, если БД реорганизовал данные в таблице, они будут иметь другой порядок. C # вполне может упорядочить вещи совершенно по-другому как побочный эффект от того, как работает остальная часть алгоритма сортировки. Нет гарантии, что db и c # всегда будут сортироваться одинаково; каждый из них сдастся, когда сортировка настолько хороша, насколько это возможно для LastChange
Если вам всегда нужны данные в определенном порядке, вы должны точно их отсортировать. Если самим данным не нужно ничего упорядочивать, то это непротиворечиво, вы должны написать свою собственную систему сортировки или предоставить дополнительные данные
Например, если мы всегда хотели, чтобы эти данные были из таблицы БД, содержащей только имена:
Tim
James
John
Это не алфавитный, обратный алфавитный, алфавитный по второму символу, он не отсортирован по длине и т. Д. В этих данных нет ничего, что мы могли бы отсортировать с точки зрения самих данных, поэтому нам придется:
ORDER BY
CASE personname
WHEN 'Tim' THEN 0
WHEN 'James' THEN 1
WHEN 'John' THEN 2
END
Здесь мы буквально преобразовали наши данные в сортируемую вещь
TLDR; если вы всегда хотите, чтобы данные сортировались определенным образом, вы должны быть индивидуальны для каждой строки. Комбинация столбцов, по которым вы сортируете, должна быть уникальной. Как только вы сортируете по набору столбцов, которые не являются уникальными, идентичные данные могут появляться в любом непоследовательном, случайном порядке
Или это как-то связано с типом smalldatetime?
Нет, это влияет на все сортируемые наборы данных, где более чем одна строка имеет одинаковое значение, и ничто больше не помогает алгоритму сортировки выбирать, какая из идентичных строк должна идти первой