Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

LINQ Ordering (Sorting) Operators: OrderBy and OrderByDescending in C#

In this article, we are going to learn LINQ ordering (sorting) operators in C# with examples. LINQ sorting operators are used to arrange the collection data into ascending or descending order based on one or more attributes (fields). Below are the five sorting operator.

1. OrderBy
2. OrderByDescending
3. ThenBy
4. ThenByDescending
5. Reverse


In this tutorial, we are going to learn OrderBy and OrderByDescending operators only.

OrderBy

OrderBy operator will sort values in ascending order. It sorts collection data in ascending order by default, here ascending keyword is optional.

OrderByDescending

OrderByDescending operator will sort values in descending order.

ThenBy

OrderBy operator will sort values in ascending order. ThenBy is used after OrderBy to sort the collection data on another field in ascending order. LINQ will first sort the collection based on primary field which is specified by OrderBy and then resulted collection is sorted into ascending order again based on secondary field specified by ThenBy.

ThenByDescending

Just like ThenBy, ThenByDescending is used to sort data in descending order.

Reverse

Reverse operator simply sort collection data in reverse order.

Related Articles

  1. Introduction to LINQ Standard Query Operators Vs SQL

Using OrderBy Method

To understand this, I have created a Employee class with 3 public properties and one static method which will return a list of all employees as shown below.


class Employee
{
public int Id;
public string Name;
public int DeptId;

public static List GetAllEmployees()
{
Employee emp1 = new Employee { Id = 1, Name = "Rahul", DeptId = 102 };
Employee emp2 = new Employee { Id = 4, Name = "Anil", DeptId = 101 };
Employee emp3 = new Employee { Id = 3, Name = "Yogesh", DeptId = 102 };
Employee emp4 = new Employee { Id = 2, Name = "Mary", DeptId = 101 };

List empList = new List();

empList.Add(emp1);
empList.Add(emp2);
empList.Add(emp3);
empList.Add(emp4);

return empList;
}
}

Let us print all employee's name before applying sorting.


class Program
{
static void Main(string[] args)
{
List obj = Employee.GetAllEmployees();

Console.WriteLine("Before Sorting:");
foreach (Employee e in obj)
{
Console.WriteLine(e.Name);
}
}
}
class Employee
{
public int Id;
public string Name;
public int DeptId;

public static List GetAllEmployees()
{
Employee emp1 = new Employee { Id = 1, Name = "Rahul", DeptId = 102 };
Employee emp2 = new Employee { Id = 4, Name = "Anil", DeptId = 101 };
Employee emp3 = new Employee { Id = 3, Name = "Yogesh", DeptId = 102 };
Employee emp4 = new Employee { Id = 2, Name = "Mary", DeptId = 101 };

List empList = new List();

empList.Add(emp1);
empList.Add(emp2);
empList.Add(emp3);
empList.Add(emp4);

return empList;
}
}
/*
OUTPUT
Before Sorting:
Rahul
Anil
Yogesh
Mary
*/

Now will be applying sorting using OrderBy on Name property.


static void Main(string[] args)
{
List obj = Employee.GetAllEmployees();

Console.WriteLine("Before Sorting:");
foreach (Employee e in obj)
{
Console.WriteLine(e.Name);
}

Console.WriteLine();

IEnumerable sortedResult = Employee.GetAllEmployees().OrderBy(x => x.Name);

Console.WriteLine("After Sorting:");
foreach (Employee e in sortedResult)
{
Console.WriteLine(e.Name);
}
Console.ReadKey();
}
/*
OUTPUT
Before Sorting:
Rahul
Anil
Yogesh
Mary

After Sorting:
Anil
Mary
Rahul
Yogesh
*/

Using orderby As SQL Like Syntax

Now will use SQL like syntax.


static void Main(string[] args)
{
IEnumerable sortedResult = from emp in Employee.GetAllEmployees()
orderby emp.Name // by default ascending order
select emp;

Console.WriteLine("After Sorting:");
foreach (Employee e in sortedResult)
{
Console.WriteLine(e.Name);
}
Console.ReadKey();
}
/*
OUTPUT
After Sorting:
Anil
Mary
Rahul
Yogesh
*/

Using OrderByDescending Method

Now will be applying sorting using OrderByDescending on Name property.


static void Main(string[] args)
{
IEnumerable sortedResult = Employee.GetAllEmployees().OrderByDescending(x => x.Name);

Console.WriteLine("After Sorting:");
foreach (Employee e in sortedResult)
{
Console.WriteLine(e.Name);
}
Console.ReadKey();
}
/*
OUTPUT
After Sorting:
Yogesh
Rahul
Mary
Anil
*/

Using orderby with descending As SQL Like Syntax

Now will use SQL like syntax to sort them in descending order.


static void Main(string[] args)
{
IEnumerable sortedResult = from emp in Employee.GetAllEmployees()
orderby emp.Name descending
select emp;

Console.WriteLine("After Sorting:");
foreach (Employee e in sortedResult)
{
Console.WriteLine(e.Name);
}
Console.ReadKey();
}
/*
OUTPUT
After Sorting:
Yogesh
Rahul
Mary
Anil
*/

Sorting C# Array using OrderBy and OrderByDescending


string[] Subjects = { "Joomla", "C++", "VB", "Java", "ASP.Net", "C", "Perl" };

var sortedSubjects1 = from s in Subjects
orderby s
select s;
Console.WriteLine("After sorting in ascending order using sql like query");
foreach (string s in sortedSubjects1)
{
Console.WriteLine(s);
}
/*
OUTPUT:
ASP.Net
C
C++
Java
Joomla
Perl
VB
*/

var sortedSubjects2 = from s in Subjects
orderby s descending
select s;
Console.WriteLine("After sorting in descending order using sql like query");
foreach (string s in sortedSubjects2)
{
Console.WriteLine(s);
}
/*
OUTPUT:
VB
Perl
Joomla
Java
C++
C
ASP.Net
*/

var sortedSubjects3 = Subjects.OrderBy(x => x);
Console.WriteLine("After sorting in ascending order using OrderBy method");
foreach (string s in sortedSubjects3)
{
Console.WriteLine(s);
}
/*
OUTPUT:
ASP.Net
C
C++
Java
Joomla
Perl
VB
*/

var sortedSubjects4 = Subjects.OrderByDescending(x => x);
Console.WriteLine("After sorting in descending order using OrderByDescending method");
foreach (string s in sortedSubjects4)
{
Console.WriteLine(s);
}
Console.ReadKey();
/*
OUTPUT:
VB
Perl
Joomla
Java
C++
C
ASP.Net
*/


This post first appeared on ASPArticles, please read the originial post: here

Share the post

LINQ Ordering (Sorting) Operators: OrderBy and OrderByDescending in C#

×

Subscribe to Asparticles

Get updates delivered right to your inbox!

Thank you for your subscription

×