C#3.0からLINQという機能が加わった。
LINQとは「Language INtegrated Query」の略で、統合言語クエリと訳される。
LINQを使うと、C#やVBのコード中にSQLに似た検索文を記述でき、データを抽出したり、集計したりするロジックが書きやすくなる。
基本的なLINQを使ったプログラムは、例えば以下のようになる。
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LinqLesson
{
class Program
{
static void Main(string[] args)
{
// データを定義
var persons = new[]
{
new{Name="Tom",Age=17},
new{Name="Ken",Age=46},
new{Name="Alice",Age=18},
new{Name="Mike",Age=19},
new{Name="John",Age=23}
};
// Ageが20以上のものを選択
var result =
from person in persons
where 20 <= person.Age
select person;
// 選択結果を列挙
foreach (var person in result)
{
Console.WriteLine("Name:" + person.Name + " Age:" + person.Age);
}
}
}
}
23-27行目がLINQで記述した部分となる。
SQLに似ているが、記述する順序が若干異なっている。
SQLならば「SELECT * FROM persons WHERE 20 <= Age」のような感じになるだろう。
上のLINQの部分を読み下してみると、
「personという変数でpersonsを列挙する。
条件はAgeが20以上のデータとする。
抽出するのはpersonである。」
という感じだろうか・・・。
プログラムを実行すると以下のようになる。

上の例のLINQではデータ全てを抽出した形だが、
selectの部分を変えると抽出するデータを絞ることもできる。
例えば、以下のようにすると、データ中のNameという部分だけ抽出される。
// 名前だけ全て表示
foreach (var name in
from person in persons select person.Name)
{
Console.WriteLine("Name:" + name);
}
SQLならば「SELECT Name FROM persons」のようになるだろう。
23行目以降をこのコードに書き換えて実行すると以下のようになる。
