|
|
連載:[完全版]究極のC#プログラミング
Chapter16 LINQとメソッド構文
川俣 晶
2010/03/29 |
|
|
16.4 絞り込みと結果の生成
すでに説明したさまざまな句を含むクエリ式をメソッド構文に書き換えてみよう。
まず、where句による結果の絞り込みとselect句による結果の生成を含むサンプルコードを書き換えてみよう(リスト16.6参照)。
using System;
using System.Linq;
class 車両形式
{
public bool 地下鉄乗り入れ可能 = false;
public string 形式名;
public int 導入年度;
}
class Program
{
static void Main(string[] args)
{
車両形式[] 車両形式データ =
{
new 車両形式() { 形式名 = "6000系", 導入年度 = 1972,
地下鉄乗り入れ可能 = true },
new 車両形式() { 形式名 = "7000系", 導入年度 = 1984 },
new 車両形式() { 形式名 = "8000系", 導入年度 = 1992 },
new 車両形式() { 形式名 = "9000系", 導入年度 = 2001,
地下鉄乗り入れ可能 = true },
};
var query = from x in 車両形式データ
where x.地下鉄乗り入れ可能
select new { x.形式名, x.導入年度 };
foreach (var 形式 in query)
{
Console.WriteLine(
"{0} {1}年導入", 形式.形式名, 形式.導入年度);
}
// 出力:
// 6000系 1972年導入
// 9000系 2001年導入
}
}
|
|
リスト16.6 絞り込みと結果の生成 |
上記リスト16.6のクエリ式は、次の行に書き換えることができる。
var query = 車両形式データ
.Where((x) => x.地下鉄乗り入れ可能)
.Select((x) => new { x.形式名, x.導入年度 });
|
|
where句はWhereメソッドの呼び出しに置き換えられ、引数は条件式ではなくラムダ式に変化している。また、select句はSelectメソッドの呼び出しに置き換えられているが、もちろん型名を指定しないオブジェクト生成を引数に記述できる。
この記述において、Whereメソッドの引数にあるラムダ式の仮引数xと、Selectメソッドの引数にあるラムダ式の仮引数xはまったく別個の存在となる。クエリ式では範囲変数xは1つだけ宣言されて使用されたが、ラムダ式の引数はそれぞれ別個に宣言し、別個に使用される必要がある。これも、クエリ式とメソッド構文の相違といえる。
Insider.NET 記事ランキング
本日
月間