Переменные методы LINQ поддерживают относительный порядок элементов?

Скажем, что у меня List<Foo> foos, где важна текущая последовательность элементов. Если я затем применяю метод LINQ Enumerable, такой как GroupBy, Where или Select, могу ли я полагаться на результирующий IEnumerable<Foo> на итерацию в том же относительном порядке, что и исходный список?

Ответ 1

Да, для методов Enumerable (LINQ to Objects, которые относятся к List<T>, которые вы упомянули), вы можете положиться на порядок элементов, возвращаемых Select, Where или GroupBy. Это не относится к вещам, которые по своей сути неупорядочены, например, ToDictionary или Distinct.

В документации Enumerable.GroupBy:

Объекты IGrouping<TKey, TElement> приводятся в порядке, основанном на порядке элементов в источнике, который произвел первый ключ каждого IGrouping<TKey, TElement>. Элементы в группировке получаются в том порядке, в каком они появляются в source.

Это не обязательно верно для методов расширения IQueryable (другие поставщики LINQ).