Ответ
ThenBy — это метод расширения LINQ, который применяется для последующей сортировки по дополнительному ключу после первичной сортировки, выполненной методами OrderBy или OrderByDescending. Он возвращает интерфейс IOrderedEnumerable<T>.
Синтаксис и пример:
class Employee
{
public string Department { get; set; }
public string Name { get; set; }
public int Salary { get; set; }
}
var employees = new List<Employee>
{
new Employee { Department = "IT", Name = "Charlie", Salary = 60000 },
new Employee { Department = "HR", Name = "Alice", Salary = 55000 },
new Employee { Department = "IT", Name = "Bob", Salary = 70000 },
new Employee { Department = "IT", Name = "Alice", Salary = 65000 }
};
// Сортировка по отделу (по возрастанию), затем по имени (по возрастанию),
// затем по зарплате (по убыванию)
var sortedEmployees = employees
.OrderBy(e => e.Department) // Первичный ключ
.ThenBy(e => e.Name) // Вторичный ключ
.ThenByDescending(e => e.Salary); // Третичный ключ (по убыванию)
/* Результат:
Department: HR, Name: Alice, Salary: 55000
Department: IT, Name: Alice, Salary: 65000
Department: IT, Name: Bob, Salary: 70000
Department: IT, Name: Charlie, Salary: 60000
*/
Ключевые особенности:
- Работает только после
OrderBy: ВызовThenByбез предшествующегоOrderBy/OrderByDescendingвызовет ошибку компиляции. - Ленивое выполнение: Сортировка происходит только в момент перечисления результатов (например, в цикле
foreachили при вызовеToList()). - Стабильность: Методы сортировки LINQ являются стабильными. Это означает, что если два элемента имеют одинаковые ключи, их относительный порядок из исходной коллекции сохраняется.
- Аналог для SQL: Соответствует конструкции
ORDER BY Department, Name, Salary DESCв SQL.
ThenBy и ThenByDescending — незаменимые инструменты для реализации многоуровневой сортировки данных в запросах LINQ.