Выбрать главу

// Сформировать запрос на получение значений в отсортированном порядке, var posNums = from n in nums orderby n select n;

Console.Write("Значения по нарастающей: ");

// Выполнить запрос и вывести его результаты. foreach(int i in posNums) Console.Write(i + " ");

При выполнении этой программы получается следующий результат.

Значения по нарастающей: -19 -5 0 2 4 7 10

Для того чтобы изменить порядок сортировки по нарастающей на сортировку по убывающей, достаточно указать ключевое слово descending, как показано ниже.

var posNums = from n in nums

orderby n descending select n;

Попробовав выполнить этот запрос, вы получите значения в обратном порядке. Зачастую сортировка результатов запроса проводится по единственному критерию. Тем не менее для сортировки по нескольким критериям служит приведенная ниже форма оператора orderby.

orderby элемент_А направление, элемент_В направление, элемент_С направление, ...

В данной форме элемент_А обозначает конкретный элемент, по которому проводится основная сортировка; элемент_В — элемент, по которому производится сортировка каждой группы эквивалентных элементов; элемент_С — элемент, по которому производится сортировка всех этих групп, и т.д. Таким образом, каждый последующий элемент обозначает дополнительный критерий сортировки. Во всех этих критериях указывать направление сортировки необязательно, но по умолчанию сортировка проводится по нарастающей. Ниже приведен пример программы, в которой сортировка информации о банковских счетах осуществляется по трем критериям: фамилии, имени и остатку на счете.

// Сортировать результаты запроса по нескольким // критериям, используя оператор orderby.

using System; using System.Linq;

class Account {

public string FirstName { get; private set; } public string LastName { get; private set; } public double Balance { get; private set; } public string AccountNumber { get; private set; }

public Account(string fn, string In, string accnum, double b) {

FirstName = fn;

LastName = In;

AccountNumber = accnum;

Balance = b;

}

}

class OrderbyDemo { static void Main() {

// Сформировать исходные данные.

Account[] accounts =

{ new Account("Том", "Смит", "132CK", 100.23), new Account("Том", "Смит", "132CD", 10000.00),

new    Account("Ральф",    "Джонс",    "436CD",    1923.85),

new    Account    ("Ральф",    "Джонс",    "454MM",    987.132),

new    Account("Тед", "Краммер",    "897CD",    3223.19),

new    Account("Ральф",    "Джонс",    "434CK",    -123.32),

new Account("Capa",    "Смит",    "543MM",    5017.40),

new Account("Capa",    "Смит",    "547CD",    34955.79),

new Account("Capa",    "Смит",    "843CK",    345.00),

new Account("Альберт", "Смит", "445CK", -213.67), new Account("Бетти", "Краммер","968MM",5146.67), new Account("Карл",    "Смит",    "078CD",    15345.99),

new Account("Дженни", "Джонс", "108CK", 10.98)

};

// Сформировать запрос на получение сведений о // банковских счетах в отсортированном порядке.

// Отсортировать эти сведения сначала по имени, затем //по фамилии и, наконец, по остатку на счете, var acclnfo = from асс in accounts

orderby acc.LastName, acc.FirstName, acc.Balance select acc;

Console.WriteLine("Счета в отсортированном порядке: ") ; string str = "";

// Выполнить запрос и вывести его результаты, foreach(Account acc in acclnfo) { if(str != acc.FirstName) {

Console.WriteLine(); str = acc.FirstName;

}

Console.WriteLine("{0}, {l}\tHoMep счета: {2}, {3,10:C}", acc.LastName, acc.FirstName, acc. AccountNumber, acc.Balance);

}

Console.WriteLine ();

}

}

Ниже приведен результат выполнения этой программы.

Счета в отсортированном порядке:

Джонс,    Дженни    Номер    счета:    108СК,    $10.98

Джонс,    Ральф    Номер    счета:    434СК,    ($123.32)

Джонс,    Ральф    Номер    счета:    454ММ,    $987.13

Джонс,    Ральф    Номер    счета:    436CD,    $1,923.85

Краммер, Бетти    Номер    счета:    968ММ,    $5,146.67

Краммер, Тед    Номер    счета:    897CD,    $3,223.19

Смит, Альберт    Номер    счета:    445СК,    ($213.67)

Смит, Карл    Номер    счета:    078CD,    $15,345.99

Смит, Сара    Номер    счета:    843СК,    $345.00

Смит, Сара    Номер    счета:    543ММ,    $5,017.40

Смит, Сара    Номер    счета:    547CD,    $34,955.79

Смит, Том    Номер    счета:    132СК,    $100.23

Смит, Том    Номер    счета:    132CD,    $10,000.00