Страница 308 из 502
<b>Значения по нарастающей: -19 -5 0 2 4 7 10</b>
Для того чтобы изменить порядок сортировки по нарастающей на сортировку по убывающей, достаточно указать ключевое слово descending, как показано ниже.
<b>var posNums = from n in nums</b>
<b>orderby n descending select n;</b>
Попробовав выполнить этот запрос, вы получите значения в обратном порядке. Зачастую сортировка результатов запроса проводится по единственному критерию. Тем не менее для сортировки по нескольким критериям служит приведенная ниже форма оператора orderby.
<b>orderby элемент_А направление, элемент_В направление, элемент_С направление, ...</b>
В данной форме элемент_А обозначает конкретный элемент, по которому проводится основная сортировка; элемент_В — элемент, по которому производится сортировка каждой группы эквивалентных элементов; элемент_С — элемент, по которому производится сортировка всех этих групп, и т.д. Таким образом, каждый последующий элемент обозначает дополнительный критерий сортировки. Во всех этих критериях указывать направление сортировки необязательно, но по умолчанию сортировка проводится по нарастающей. Ниже приведен пример программы, в которой сортировка информации о банковских счетах осуществляется по трем критериям: фамилии, имени и остатку на счете.
<b>// Сортировать результаты запроса по нескольким</b>
<b>// критериям, используя оператор orderby.</b>
<b>using System;</b>
<b>using System.Linq;</b>
<b>class Account {</b>
<b> public string FirstName { get; private set; }</b>
<b> public string LastName { get; private set; }</b>
<b> public double Balance { get; private set; }</b>
<b> public string AccountNumber { get; private set; }</b>
<b> public Account(string fn, string In, string accnum, double b) {</b>
<b> FirstName = fn;</b>
<b> LastName = In;</b>
<b> AccountNumber = accnum;</b>
<b> Balance = b;</b>
<b> }</b>
<b>}</b>
<b>class OrderbyDemo {</b>
<b> static void Main() {</b>
<b> // Сформировать исходные данные.</b>
<b> Account[] accounts =</b>
<b> {new Account("Том", "Смит", "132CK", 100.23),</b>
<b> new Account("Том", "Смит", "132CD", 10000.00),</b>
<b> new Account("Ральф", "Джонс", "436CD", 1923.85),</b>
<b> new Account("Ральф", "Джонс", "454MM", 987.132),</b>
<b> new Account("Тед", "Краммер", "897CD", 3223.19),</b>
<b> new Account("Ральф", "Джонс", "434CK", -123.32),</b>
<b> new Account("Capa", "Смит", "543MM", 5017.40),</b>
<b> new Account("Capa", "Смит", "547CD", 34955.79),</b>
<b> new Account("Capa", "Смит", "843CK", 345.00),</b>
<b> new Account("Альберт", "Смит", "445CK", -213.67),</b>
<b> new Account("Бетти", "Краммер","968MM",5146.67),</b>
<b> new Account("Карл", "Смит", "078CD", 15345.99),</b>
<b> new Account("Дженни", "Джонс", "108CK", 10.98)</b>
<b> };</b>
<b> // Сформировать запрос на получение сведений о</b>
<b> // банковских счетах в отсортированном порядке.</b>
<b> // Отсортировать эти сведения сначала по имени, затем</b>
<b> //по фамилии и, наконец, по остатку на счете,</b>
<b> var accInfo = from acc in accounts</b>
<b> orderby acc.LastName, acc.FirstName, acc.Balance</b>
<b> select acc;</b>
<b> Console.WriteLine("Счета в отсортированном порядке: ");</b>
<b> string str = "";</b>
<b> // Выполнить запрос и вывести его результаты,</b>
<b> foreach (Account acc in accInfo) {</b>
<b> if (str != acc.FirstName) {</b>
<b> Console.WriteLine();</b>
<b> str = acc.FirstName;</b>
<b> }</b>
<b> Console.WriteLine("{0}, {1}tHoMep счета: {2}, {3}",</b>