Do LINQ's Enumerable Methods Maintain Relative Order of Elements?
c#, enumerable, linq
Solution
Yes, for `Enumerable` methods (LINQ to Objects, which applies to `List<T>` you mentioned), you can rely on the order of elements returned by `Select`, `Where`, or `GroupBy`. This is not the case for things that are inherently unordered like `ToDictionary` or `Distinct`.
From Enumerable.GroupBy documentation:
The `IGrouping<TKey, TElement>` objects are yielded in an order based on the order of the elements in source that produced the first key of each `IGrouping<TKey, TElement>`. Elements in a grouping are yielded in the order they appear in `source`.
This is not necessarily true for `IQueryable` extension methods (other LINQ providers).
Problem
Say I have `List<Foo> foos` where the current order of elements is important. If I then apply a LINQ Enumerable method such as `GroupBy`, `Where` or `Select`, can I rely on the resulting `IEnumerable<Foo>` to iterate in the same relative order as the original list?