Добавить в цитаты Настройки чтения

Страница 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(&quot;Том&quot;, &quot;Смит&quot;, &quot;132CK&quot;, 100.23),</b>

<b>      new Account(&quot;Том&quot;, &quot;Смит&quot;, &quot;132CD&quot;, 10000.00),</b>

<b>      new Account(&quot;Ральф&quot;, &quot;Джонс&quot;, &quot;436CD&quot;, 1923.85),</b>

<b>      new Account(&quot;Ральф&quot;, &quot;Джонс&quot;, &quot;454MM&quot;, 987.132),</b>

<b>      new Account(&quot;Тед&quot;, &quot;Краммер&quot;, &quot;897CD&quot;, 3223.19),</b>

<b>      new Account(&quot;Ральф&quot;, &quot;Джонс&quot;, &quot;434CK&quot;, -123.32),</b>

<b>      new Account(&quot;Capa&quot;, &quot;Смит&quot;, &quot;543MM&quot;, 5017.40),</b>

<b>      new Account(&quot;Capa&quot;, &quot;Смит&quot;, &quot;547CD&quot;, 34955.79),</b>

<b>      new Account(&quot;Capa&quot;, &quot;Смит&quot;, &quot;843CK&quot;, 345.00),</b>

<b>      new Account(&quot;Альберт&quot;, &quot;Смит&quot;, &quot;445CK&quot;, -213.67),</b>

<b>      new Account(&quot;Бетти&quot;, &quot;Краммер&quot;,&quot;968MM&quot;,5146.67),</b>

<b>      new Account(&quot;Карл&quot;, &quot;Смит&quot;, &quot;078CD&quot;, 15345.99),</b>

<b>      new Account(&quot;Дженни&quot;, &quot;Джонс&quot;, &quot;108CK&quot;, 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(&quot;Счета в отсортированном порядке: &quot;);</b>

<b>    string str = &quot;&quot;;</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(&quot;{0}, {1}tHoMep счета: {2}, {3}&quot;,</b>