Using C# LINQ - A Practical Overview
Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Methods - Changing element order
These LINQ methods reorder the elements in an IEnumerable<T> sequence. Each method in this chapter provides a different way of specifying the desired element order.
NOTE: Same comment as in the previous chapter. If I state that a method "returns a sequence", this is not technically true. The methods in this chapter return an
IEnumerable<T>, which is a generator (or an iterator) that can provide a sequence on demand.
Reverse() method
The Reverse() method returns a new sequence that contains all the elements from the source sequence in the opposite order.
IEnumerable<string> strings = new List<string> { "first", "then", "and then", "finally" };
// Will contain { "finally", "and then", "then", "first" }
IEnumerable<string> result = strings.Reverse();
NOTE: The
Reverse()LINQ method (an extension method toIEnumerable<T>) behaves differently from theReverse()method onList<T>. This unfortunate situation can cause confusion. More on this in the Advanced Topics course.
OrderBy(<keySelector>) method
OrderBy() sorts the elements in the source sequence based on a key value. The key for an element is calculated by a keySelector delegate method passed into the OrderBy() call. The examples below demonstrate how this works.
List<string> strings = new List<string> { "first", "then", "and then", "finally" };
// Sort the strings by their length
// Will contain { "then", "first", "finally", "and then" }
IEnumerable<string> result = strings.OrderBy(str => str.Length);
// Sort the strings by the 3rd character
// Will contain { "and then", "then", "finally", "first" }
IEnumerable<string> result = strings.OrderBy(str => str[2]);
// Sort the strings by their reversed characters
// Will contain { "then", "and then", "first", "finally" }
IEnumerable<string> result = strings.OrderBy(str => new string(str.Reverse().ToArray()));
NOTE: The key values are sorted based on the output of the default comparer for the data type of the keys.
NOTE 2: There is also an
OrderByDescending()version of this method that sorts in reverse order by the specified key value.
There is no Sort()
If you want to sort the elements within a sequence, then you will need to pass in an identity keySelector method that indicates that each element in the sequence is, itself, a key. Here is what that looks like:
List<string> strings = new List<string> { "first", "then", "and then", "finally" };
// Sort the strings in alphabetical order
// Will contain { "and then", "finally", "first", "then" }
IEnumerable<string> result = strings.OrderBy(str => str);
OrderBy() exercise
In the following exercise, try to sort all the input names by Last, in descending order.