LINQ標準のクエリーオペレータソートorderby、thenby、Take


シーケンスをソートするには、orderby句を使用します.前にorderby descending句を使った例を復習します.ここで、選手は試合を勝ち取った回数によって降順に並べ替えられ、試合を勝ち取った回数はキーワードセレクタで指定される.
private static void Ordering()
        {

            var racers = from r in Formula1.GetChampions()
                         where r.Country == "Brazil"
                         orderby r.Wins descending
                         select r; 

            foreach (var racer in racers)
            {
                Console.WriteLine("{0:C}: {0:L}, {0:F}", racer);  //         
            }


        }

orderby句解析はOrderBy()メソッド、orderby descending句解析はOrderBy Descending()メソッド:var racers=Formula 1.GetChampions(). Where(r = > r.Country == "Brazil"). OrderByDescending(r = > r.Wins). Select(r = > r);
OrderBy()メソッドとOrderByDescending()メソッドは、IOrderEnumerableを返します.このインタフェースはインタフェースIEnumerableから派生しているが、CreateOrderedEnumerable-()という追加の方法が含まれている.この方法は、シーケンスをさらにソートするために使用されます.
キーワードセレクタに従ってソートする場合、両方の順序が同じであれば、ThenBy()メソッドとThenByDescending()メソッドを使用してソートを続行できます.
この2つの方法はIOrderEnumerableが必要ですが、このインタフェースにも戻ります.
したがって、任意の複数のThenBy()メソッドとThenByDescending()メソッドを追加して、セットをソートすることができます.
 
LINQクエリーを使用する場合は、orderby句にソートに使用するすべての異なるキーワード(カンマで区切られた)を追加するだけです.
ここでは、すべての選手が国順に並べられ、姓順に並べられ、最後に名前順に並べられます.
LINQクエリ結果に追加されたTake()拡張メソッドは、最初の10個の結果を抽出するために使用されます.
private static void Ordering()
       {

           var racers = (from r in Formula1.GetChampions()
                         orderby r.Country, r.LastName, r.FirstName
                         select r).Take(10);

           foreach (var racer in racers)
           {
               Console.WriteLine("{0:C}: {0:L}, {0:F}", racer);  //         
           }
       }

Lambda式は、OrderBy()メソッドとThenBy()メソッドを使用して、同じ操作を実行できます.
 
private static void Ordering()
       {

           var racers = Formula1.GetChampions().
              OrderBy(r => r.Country).
              ThenBy(r => r.LastName).
              ThenBy(r => r.FirstName).
              Take(10);


           foreach (var racer in racers)
           {
               Console.WriteLine("{0:C}: {0:L}, {0:F}", racer);  //         
           }


       }