LINQは「Language Integrated Query」の略。自分が勉強したイメージだと、SQLの構文をC#で使えるイメージ。LINQを使うには、usingディレクティブを使って名前空間System.Linqを指定する。
イメージでSQLと言ったのは、LINQにはクエリ演算子なるものが用意されているから。以下に例を示す。
var names = new List<string> { "Tokyo", "New Delhi", "Bangkok", "London", "Paris", "Berlin", "Canberra", "Hong Kong", }; // listより、文字列が5以下の要素を抽出 IEnumerable<string> query = names.Where(s => s.Length <= 5);
なお、クエリ演算子は数が多いため、必要に応じて都度調べることにする。
遅延実行
LINQの特徴に、遅延実行がある。これは、本当にデータが必要になったときにクエリが実行されることをさす。
var names = new List<string> { "Tokyo", "New Delhi", "Bangkok", "London", "Paris", "Berlin", "Canberra", "Hong Kong", }; // listより、文字列が5以下の要素を抽出 IEnumerable<string> query = names.Where(s => s.Length <= 5); foreach(var item in query) { // TokyoとParisが出力 Console.WriteLine(item); } // リストを更新 names[0] = "Osaka"; foreach(var item in query) { // OsakaとParisが出力される // Tokyoが出力されないのは、このタイミングでWhereメソッドが実行されているため Console.WriteLine(item); }
逆に即時実行をしたい場合は、WhereメソッドとToArrayメソッドをメソッドチェーンでつなぎ、配列に変換してしまえばいい。
var names = new List<string> { "Tokyo", "New Delhi", "Bangkok", "London", "Paris", "Berlin", "Canberra", "Hong Kong", }; // listより、文字列が5以下の要素を抽出し、配列に変換 IEnumerable<string> query = names.Where(s => s.Length <= 5).ToArray(); foreach(var item in query) { // TokyoとParisが出力 Console.WriteLine(item); } // リストを更新 names[0] = "Osaka"; foreach(var item in query) { // TokyoとParisが出力される Console.WriteLine(item); }