Скажем, что у меня List<Foo> foos
, где важна текущая последовательность элементов. Если я затем применяю метод LINQ Enumerable, такой как GroupBy
, Where
или Select
, могу ли я полагаться на результирующий IEnumerable<Foo>
на итерацию в том же относительном порядке, что и исходный список?
Переменные методы LINQ поддерживают относительный порядок элементов?
Ответ 1
Да, для методов Enumerable
(LINQ to Objects, которые относятся к List<T>
, которые вы упомянули), вы можете положиться на порядок элементов, возвращаемых Select
, Where
или GroupBy
. Это не относится к вещам, которые по своей сути неупорядочены, например, ToDictionary
или Distinct
.
В документации Enumerable.GroupBy:
Объекты
IGrouping<TKey, TElement>
приводятся в порядке, основанном на порядке элементов в источнике, который произвел первый ключ каждогоIGrouping<TKey, TElement>
. Элементы в группировке получаются в том порядке, в каком они появляются вsource
.
Это не обязательно верно для методов расширения IQueryable
(другие поставщики LINQ).