C# LINQ orderby句によるクエリ結果の並べ替え


スポンサーリンク

クエリ実行結果の並べ替え(ソート)を行うときは、orderby句を使います。

orderby ソートキー 方法

並べ替えの順序は、

  • ascending(昇順)
  • descending(降順)

を指定することができます。デフォルトはascending(昇順)を指定することができます。デフォルトはascendingです。

以下を実行すると、配列の結果を昇順で並べ替えされて取得することができます。

static void Main(string[] args)
{
    int[] nums = {22,38,3,-29,58,48,-96};

    var sortedNums = from n in nums
                       orderby n
                       select n;
    foreach (int i in sortedNums)
        Console.WriteLine(i);

    Console.ReadLine();
}

クラスを作って、あるプロパティをselect句で取得することもできます。

以下はクラスのプロパティをLINQでselectする例です。
ちなみに、C#のコンソールアプリケーションですが、クリップボードに出力結果をコピーしています。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ConsoleApplication1
{
    class Friend
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public Friend(string name, int age)
        {
            this.Name = name;
            this.Age = age;
        }
    }  
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            Friend[] friends = {
                                 new Friend("takashi",20),
                                 new Friend("ano",25),
                                 new Friend("kego", 28)
                               };
            var names = from entry in friends
                        select entry.Name;

            StringBuilder sb = new StringBuilder();

            foreach (string name in names)
            {
                sb.Append(" " + name);
            }

            Clipboard.SetText(sb.ToString());
            Console.WriteLine(sb.ToString());
            Console.ReadLine();
        }
    }
}

これを実行すると、クリップボードにこのような値がコピーされます。

 takashi ano kego

<参考>
http://blog.another-d-mention.ro/programming/c/use-clipboard-copypaste-in-c-console-application/