LINQ基礎
クエリ演算子
LINQが用意しているメソッドのこと。
クエリ演算子は全て IEnumerable<T>
に対する拡張メソッドとして定義されている。
シーケンス
標準クエリ演算子の操作対象のデータをシーケンスと呼ぶ。配列や List<T>
等。
クエリ遅延実行/即時実行
遅延実行
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 5 namespace Program 6 { 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 string[] names = { 12 "Tokyo", "New Delhi", "Bangkok", "Paris", 13 }; 14 var query = names.Where(x => x.Length <= 5); 15 16 foreach (var item in query) 17 Console.WriteLine(item); 18 19 Console.WriteLine("----------------"); 20 21 names[0] = "Osaka"; 22 foreach (var item in query) 23 Console.WriteLine(item); 24 } 25 } 26 }
Tokyo Paris ---------------- Osaka Paris
Whereメソッドが呼び出されても、検索はその時には行われずに、
実際に値が必要になったとき(foreachで要素を取り出したとき)に、クエリが実行される。
即時実行
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 5 namespace Program 6 { 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 string[] names = { 12 "Tokyo", "New Delhi", "Bangkok", "Paris", 13 }; 14 var query = names.Where(x => x.Length <= 5).ToArray(); // 配列に変換 15 16 foreach (var item in query) 17 Console.WriteLine(item); 18 19 Console.WriteLine("----------------"); 20 21 names[0] = "Osaka"; 22 foreach (var item in query) 23 Console.WriteLine(item); 24 } 25 } 26 }
Tokyo Paris ---------------- Tokyo Paris
ToArrayメソッドが呼び出されたときにクエリが実行され、結果が配列に格納される。
ToList メソッドに変えても同じ。Countメソッドとかも即時実行。
参考 :
実戦で役立つ C#プログラミングのイディオム/定石&パターン:書籍案内|技術評論社
LINQ クエリの概要 (C#) | Microsoft Docs