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行目以降をこのコードに書き換えて実行すると以下のようになる。