2014年6月7日土曜日

C#応用 – LINQプログラミング 4


さて、C#応用 – LINQプログラミングの

4回目である。

今回はエンティティ間の関係の

記述の話からである。



エンティティ間の関係の記述例
  // リレーショナルモデル
    class Customer
    {
        public string Name;
        public string Office;
    }
    class Order
    {
        public string CustomerName;
        public string ItemName;
        public int Qty;
    }
  // リレーショナルモデル
  var result = from c in Customer
                     join o in Order
                     on c.Name equals o.CustomerName
                     select new
                     {
                         c.Name,
                         c.CompanyName,
                         o.ItemName,
                         o.Qty
                     };

    // 1対多のモデル
    class Customer
    {
        public int ID;
        public string CompanyName;
        public Order[] Orders;
    }
    class Order
    {
        public string ItemName;
        public int Qty;
    }

    // 2関係
    Customer[] customers = ・・・;

    var results = from c indexer customers
                 where c.ID == 9
                 from o in c.Orders
                 select o;


宣言型プログラミングとは?
.NETで利用される言語は手続き型プログラミング言語である。

 手続き型プログラミング言語:問題の解法を記述する
 宣言型プログラミング言語:問題そのものを表現する

LINQはC#, VB.NETに宣言的なプログラミングを持ち込んだものである。
 ・ 開発者は必要とする結果を宣言的に記述する
 ・ 結果を抽出する方法はLINQの実装が考慮すべきこと


従来のプログラミングとの対比
何百社もある、会社名のリストからMicrosoftを抽出したい場合

C#(Not LINQ)
List<string> CompanyNames = …;
List<string> Results = new List<string>();

foreach(string c in CompanyNames)
{
    if (c == "Microsoft")
    {
        Results.Add(c);
    }
}
return Results;


C#(LINQ)
List<string> CompanyNames = …;

return from c in CompanyNames
          where c == "Microsoft"
          select c;


LINQの方がコードが短く、分かりやすく表現されている。

次回、LINQ実装に続く。


今日の名言
満足するための秘訣は、自分の手元にあるものをどうやって楽しめばよいか
知っていること、そして、自分の手の届かないものに対する、ありとあらゆる
欲望を捨て去ることである。
                               林語堂

自分の目の前にある事実そのものは、それをどんなふうに受けとめ、考えるか
ということにくらべれば、それほど重要ではない。事実に対する考え方によっては、
まだ何も手を打たないうちに、人を敗北させるかもしれない。事実に打ち負かされる
のは、自分が事実に打ち負かされていると考えるからだ。
                               ノーマン・ヴィンセント・ピール

陽の当たる場所ばかり見ていれば、影は見えません。
                               ヘレン・ケラー