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?
Asked
Active
Viewed 2,655 times
13

verdesmarald
- 11,646
- 2
- 44
- 60
-
I won't try to answer your question directly, because @Mehrdad already did a good job of that, but if you really want to understand what Linq is doing under the covers then have a look at Jon Skeet's excellent [EduLinq series of blog posts](http://msmvps.com/blogs/jon_skeet/archive/tags/Edulinq/default.aspx). – Andrew Cooper May 27 '11 at 01:13
-
1See also http://stackoverflow.com/questions/204505/preserving-order-with-linq – goodeye Nov 27 '12 at 22:59
1 Answers
20
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 eachIGrouping<TKey, TElement>
. Elements in a grouping are yielded in the order they appear insource
.
This is not necessarily true for IQueryable
extension methods (other LINQ providers).

Mehrdad Afshari
- 414,610
- 91
- 852
- 789