IOrderedEnumerable
With a C# query expression (beginning with from) we can sort a collection of elements. When we specify an orderby
clause, an IOrderedEnumerable
is returned.
IEnumerable
An IOrderedEnumerable
does the same thing an IEnumerable
does, and we can use an IOrderedEnumerable
variable where an IEnumerable
is needed.
Consider now this program. We have a string
array of 3 values. We use a query expression (starting with "from") to sort the values.
IOrderedEnumerable
. We can pass IOrderedEnumerable
to methods that require IEnumerable
.IOrderedEnumerable
directly—we can just use the variable as though it is an IEnumerable
.using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { var animals = new string[] { "bird", "cat", "ant" }; var result = from animal in animals orderby animal ascending select animal; // Our result is an IOrderedEnumerable. // ... We can use it as an IOrderedEnumerable. Test(result); // We can use the IOrderedEnumerable as an IEnumerable. Test2(result); // We can use extension methods for IEnumerable on IOrderedEnumerable. Console.WriteLine("Count: " + result.Count()); } static void Test(IOrderedEnumerable<string> result) { // We can loop over an IOrderedEnumerable. foreach (string value in result) { Console.WriteLine("IOrderedEnumerable: " + value); } } static void Test2(IEnumerable<string> result) { foreach (string value in result) { Console.WriteLine("IEnumerable: " + value); } } }IOrderedEnumerable: ant IOrderedEnumerable: bird IOrderedEnumerable: cat IEnumerable: ant IEnumerable: bird IEnumerable: cat Count: 3
The program shows that "foreach
" can be used on IOrderedEnumerable
and IEnumerable
. This is a common use for these interfaces—looping over them.
Count()
extension method (which loops over the entire collection in some cases) can also be used on IOrderedEnumerable
.For most programs, we can focus on IEnumerable
instead of IOrderedEnumerable
. The distinction is not important. But it does indicate that the values have been sorted (by an orderby
clause).