Класс Enumerable LINQ - Упорядочение последовательностей

ОГЛАВЛЕНИЕ

Упорядочение последовательностей

Методы Enumerable.OrderBy, Enumerable.ThenBy, Enumerable.OrderByDescending и Enumerable.ThenByDescending можно использовать для обеспечения начального упорядочения, а затем нескольких вторичных упорядочиваний (в порядке возрастания или убывания). В следующем примере берется последовательность клиентов, которая упорядочивается с помощью нескольких из этих методов.

' From OrderByDemo in the sample:
Dim db As New SimpleDataContext
Dim customers = _
  From cust In db.Customers _
  Where cust.ContactTitle = "Owner"

' Sort first by country, then by city descending, then by name:
Dim results = _
  customers _
  .OrderBy(Function(cust) cust.Country) _
  .ThenByDescending(Function(cust As Customer) cust.City) _
  .ThenBy(Function(cust As Customer) cust.ContactName) _
  .Select(Function(cust) String.Format("({0}, {1}) {2}", _
  cust.Country, cust.City, cust.ContactName))

Обратите внимание, что Visual Basic не выразит недовольства, если вы не укажете типы данных для параметра лямбда-выражения при вызове методов ThenBy и ThenByDescending, но если этого не сделать, не будет возможности пользоваться поддержкой со стороны IntelliSense®. Только первый метод упорядочивания в состоянии логически определить тип данных параметра лямбда-выражения. Как это ни странно, метод Select правильно определяет тип, даже в конце длинной цепочки методов. В примере упорядочиваются клиенты, чья должность имеет значение «Owner» (владелец), сначала по странам, затем в убывающем порядке по городам, и, наконец, по именам контактных лиц в пределах каждого города.

(Denmark, Kobenhavn) Jytte Petersen
(France, Paris) Marie Bertrand
(France, Nantes) Janine Labrune
(France, Marseille) Laurence Lebihan
(Germany, Koln) Henriette Pfalzheim
(Mexico, Mexico D.F.) Ana Trujillo
(Mexico, Mexico D.F.) Antonio Moreno
(Mexico, Mexico D.F.) Miguel Angel Paolino
(Norway, Stavern) Jonas Bergulfsen
(Poland, Warszawa) Zbyszek Piestrzeniewicz
...