|
|
連載:[完全版]究極のC#プログラミング
Chapter15 LINQとクエリ式
川俣 晶
2010/03/17 |
|
|
15.9 複数のソースからクエリする
from句は1つのクエリ式に複数あってよい。複数のfrom句は、それぞれがクエリのソースとして扱われる。たとえば、整数の1から9までを提供するソース2つをfrom句で取り込めば、掛け算の九九の一覧を生成するクエリ式を記述できる(リスト15.8参照)。9個のソースが2つなので、クエリ結果は9×9=81個となる。
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var query = from x in Enumerable.Range(1, 9)
from y in Enumerable.Range(1, 9)
select x + "×" + y + "=" + (x * y).ToString();
foreach (string s in query) Console.WriteLine(s);
// 出力:
// 1×1=1
// 1×2=2
// 1×3=3
// (中略)
// 9×7=63
// 9×8=72
// 9×9=81
}
}
|
|
リスト15.8 掛け算の九九一覧 |
ちなみに、ここで使用したEnumerable.RangeメソッドはSystem.Linq名前空間にあり、.NET Framework 3.5で追加されたメソッドである。連続した整数を列挙するオブジェクトを生成して返してくれる(実際に返却される型はIEnumerable<int>型)。
Rangeメソッドでは、第1引数で開始値を、第2引数で個数を指定する。forループでカウントすれば簡単に得られるのになぜ……と思う読者も多いだろうが、値のシーケンスを生成するオブジェクトは、リスト15.8のソースを見てわかるとおり、クエリ式と相性がとても良い。forループで同じことは書けないのである。シーケンスを生成する範囲オブジェクトを使うメリットについては、第3章で詳しく取り上げているのでそちらも参照していただきたい。
Insider.NET 記事ランキング
本日
月間