Вот мой запрос LINQ:
(from o in entities.MyTable
orderby o.MyColumn
select o.MyColumn).Distinct();
Вот результат:
{"a", "c", "b", "d"}
Вот сгенерированный SQL:
SELECT
[Distinct1].[MyColumn] AS [MyColumn]
FROM ( SELECT DISTINCT
[Extent1].[MyColumn] AS [MyColumn]
FROM [dbo].[MyTable] AS [Extent1]
) AS [Distinct1]
Действительно ли это - ошибка? Где мое упорядочивание, damnit?
Вы должны отсортировать после Distinct
, поскольку это не дает никаких гарантий сохранения порядка:
entities.MyTable.Select(o => o.MyColumn).Distinct().OrderBy(o => o);
В этом вопросе обсуждается правила для Linq to Objects: Сохранение порядка с помощью LINQ
В базе данных даже меньшее количество операций сохраняет порядок. Никто нигде не сохраняет порядок при использовании Distinct'ing (как правило, используется алгоритм хеширования).