さて、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
};
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実装に続く。
今日の名言
満足するための秘訣は、自分の手元にあるものをどうやって楽しめばよいか
知っていること、そして、自分の手の届かないものに対する、ありとあらゆる
欲望を捨て去ることである。
林語堂
自分の目の前にある事実そのものは、それをどんなふうに受けとめ、考えるか
ということにくらべれば、それほど重要ではない。事実に対する考え方によっては、
まだ何も手を打たないうちに、人を敗北させるかもしれない。事実に打ち負かされる
のは、自分が事実に打ち負かされていると考えるからだ。
ノーマン・ヴィンセント・ピール
陽の当たる場所ばかり見ていれば、影は見えません。
ヘレン・ケラー
