|
|
連載:[完全版]究極のC#プログラミング
Chapter16 LINQとメソッド構文
川俣 晶
2010/03/29 |
|
|
16.12 メソッド構文で複数のソースを関連付ける
複数のソースを関連付けるjoin句は、「join …… in …… on …… equals ……」といった長い構文であり、equalsのような特殊なキーワードを使う(==演算子は使わない)などの特徴があった(リスト16.13参照)。
using System;
using System.Linq;
class Program
{
class 商品情報
{
public int Id;
public string 名前;
}
class 商品販売価格
{
public int Id;
public int 価格;
}
static void Main(string[] args)
{
商品情報[] 商品情報データ =
{
new 商品情報() { Id = 1, 名前 = "PC-8001" },
new 商品情報() { Id = 2, 名前 = "MZ-80K" },
new 商品情報() { Id = 3, 名前 = "Basic Master Level-3" },
};
商品販売価格[] 商品販売価格データ =
{
new 商品販売価格() { Id = 1, 価格 = 148000 },
new 商品販売価格() { Id = 2, 価格 = 178000 },
new 商品販売価格() { Id = 3, 価格 = 229000 },
};
var query = from x in 商品情報データ
join y in 商品販売価格データ on x.Id equals y.Id
select new { Name = x.名前, Price = y.価格 };
foreach (var 商品 in query)
{
Console.WriteLine("{0} {1:C}", 商品.Name, 商品.Price);
}
// 出力:
// PC-8001 \148,000
// MZ-80K \178,000
// Basic Master Level-3 \229,000
}
}
|
|
リスト16.13 複数のソースを関連付ける |
これをメソッド構文に置き換えると、equalsのような特殊キーワードが消滅するのは当然だが、それとは別に興味深い変化が生じる。
次は実際に置き換えた例である。
var query = 商品情報データ.Join(
商品販売価格データ,
(x) => x.Id,
(y) => y.Id,(x,y) => new {
Name = x.名前, Price = y.価格 });
|
|
このように、join句はストレートに「Joinメソッド」に置き換えられ、in、on、equalsのようなキーワードはなくなり、すべてJoinメソッドの引数で渡す形になる。
しかし、ここで注目すべき点は、クエリ式のSelect句に相当する機能もJoinメソッドの引数に指定されている点である。つまり、クエリ式のjoin句をメソッド構文に置き換える際には、実際にはその後のselect句もまとめてJoinメソッド呼び出しに置き換える必要があるのである。
Insider.NET 記事ランキング
本日
月間