Sorting Operators
Sorting operations use a single or multiple attributes to order elements of a sequence.
The first criterion executes a primary sort, and through a second criterion, elements are sorted within primary sort groups. The query operator methods used to perform sort operations follow: OrderBy, OrderByDescending, ThenBy, ThenByDescending, and Reverse.
The OrderBy method sorts values in ascending order based on a key. It uses the following syntax:
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>( this IEnumerable<TSource> source, Func<TSource, TKey> keySelector )
Review two examples of its use below:
string[] terms = { "must", "be", "something", "in", "the", "water" }; IEnumerable<string> query = from term in terms orderby term.Length select term; foreach (string s in query) Console.WriteLine(s); class Guitar { public string Brand { get; set; } public int Price { get; set; } } public static void OrderByOne() { Guitar[] guitars = { new Guitar { Brand="Fender", Price=300 }, new Guitar { Brand="Ibanez", Price=150 }, new Guitar { Brand="Epiphone", Price=1200 } }; IEnumerable<Guitar> query = guitars.OrderBy(guitar => guitar.Price); foreach (Guitar guitar in query) { Console.WriteLine("{0} - {1}", guitar.Brand, guitar.Price); } }
The OrderByDescending method sorts values in descending order. It uses the following syntax:
public static IOrderedEnumerable<TSource> OrderByDescending<TSource, TKey>( this IEnumerable<TSource> source, Func<TSource, TKey> keySelector )
Review an example of its use below:
string[] terms = { "joy", "in", "repetition", "truly", "believing" }; IEnumerable<string> query = from term in terms orderby term.Substring(0, 1) descending select term; foreach (string q in query) Console.WriteLine(q);
The ThenBy method executes a secondary sort in ascending order. It uses the following syntax:
public static IOrderedEnumerable<TSource> ThenBy<TSource, TKey>( this IOrderedEnumerable<TSource> source, Func<TSource, TKey> keySelector )
Review an example of its use below:
string[] girls = { "Mayte", "Susan", "Nona", "Denise",
"Patrice", "Kim", "Manuela", "Sheila" };
// Sort by length and then alphabetically
IEnumerable<string> query =
girls.OrderBy(girl => girl.Length).ThenBy(girl => girl);
foreach (string girl in query)
{
Console.WriteLine(girl);
}
The ThenByDescending method executes a secondary sort in descending order. It uses the following syntax:
public static IOrderedEnumerable<TSource> ThenByDescending<TSource, TKey>( this IOrderedEnumerable<TSource> source, Func<TSource, TKey> keySelector )
The Reverse method reverses the element order of a collection. It uses the following syntax:
public static IEnumerable<TSource> Reverse<TSource>( this IEnumerable<TSource> source )
Review an example below:
char[] Rogers = { 'R', 'o', 'g', 'e', 'r', 's'}; char[] reversed = Rogers.Reverse().ToArray(); foreach (char c in reversed) { Console.Write(c + " "); } Console.WriteLine();