Скажем, что у меня 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).