Introduction

Entity Framework (EF) is a powerful ORM (Object-Relational Mapper) in .NET that allows developers to work with databases using .NET objects. When querying data, sorting results by multiple criteria is a common requirement. In EF, this can be achieved using OrderBy, ThenBy, OrderByDescending, and ThenByDescending methods in LINQ queries.

In this article, we will explore how to perform multiple OrderBy operations in Entity Framework with practical examples.

Understanding OrderBy and ThenBy

The OrderBy method is used to sort the query results based on a specific property in ascending order. When you need to sort by additional criteria, the ThenBy method comes into play. Similarly, OrderByDescending and ThenByDescending are used for sorting in descending order.

Basic Example. Using OrderBy and ThenBy

Let's start with a basic example. Suppose we have an Employee entity with properties LastName, FirstName, and HireDate.

Entity Definition

public class Employee
{
    public int EmployeeId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime HireDate { get; set; }
}

To sort employees first by LastName, then by FirstName, and finally by HireDate, you can use the following query:

Query with OrderBy and ThenBy

using (var context = new YourDbContext())
{
    var sortedEmployees = context.Employees
        .OrderBy(e => e.LastName)
        .ThenBy(e => e.FirstName)
        .ThenBy(e => e.HireDate)
        .ToList();
}

In this example

Example. Using OrderByDescending and ThenByDescending

If you need to sort in descending order for some properties, you can use OrderByDescending and ThenByDescending.

Query with OrderByDescending and ThenByDescending

using (var context = new YourDbContext())
{
    var sortedEmployees = context.Employees
        .OrderByDescending(e => e.LastName)
        .ThenByDescending(e => e.FirstName)
        .ThenBy(e => e.HireDate)
        .ToList();
}

In this example

Advanced Example. Dynamic Sorting

In some scenarios, you may need to apply dynamic sorting based on user input or other conditions. Here’s how you can achieve this.

Dynamic Sorting with OrderBy and ThenBy

public IQueryable<Employee> GetSortedEmployees(string sortBy, bool ascending)
{
    var query = context.Employees.AsQueryable();

    switch (sortBy)
    {
        case "LastName":
            query = ascending ? query.OrderBy(e => e.LastName) : query.OrderByDescending(e => e.LastName);
            break;
        case "FirstName":
            query = ascending ? query.OrderBy(e => e.FirstName) : query.OrderByDescending(e => e.FirstName);
            break;
        case "HireDate":
            query = ascending ? query.OrderBy(e => e.HireDate) : query.OrderByDescending(e => e.HireDate);
            break;
        default:
            query = ascending ? query.OrderBy(e => e.EmployeeId) : query.OrderByDescending(e => e.EmployeeId);
            break;
    }

    return query;
}

Usage Example

var sortedEmployees = GetSortedEmployees("LastName", true).ToList();

In this example

Summary

By combining these methods, you can effectively control the sorting order of your queries in Entity Framework, making your data retrieval more flexible and powerful.

Implementing these sorting techniques in Entity Framework will help you manage and retrieve your data efficiently, enhancing the performance and user experience of your applications.