关于查询:
查询是一种从数据源检索数据的表达式。 查询通常用专门的查询语言来表示。 随着时间的推移,人们已经为各种数据源开发了不同的语言;例如,用于关系数据库的 SQL 和用于 XML 的 XQuery。 因此,开发人员不得不针对他们必须支持的每种数据源或数据格式而学习新的查询语言。 LINQ 通过提供一种跨各种数据源和数据格式使用数据的一致模型,简化了这一情况。 在 LINQ 查询中,始终会用到对象。 可以使用相同的基本编码模式来查询和转换 XML 文档、SQL 数据库、ADO.NET 数据集、.NET 集合中的数据以及对其有 LINQ 提供程序可用的任何其他格式的数据。
所有 LINQ 查询操作都由以下三个不同的操作组成:
1.获取数据源
2.创建查询
3.执行查询
LINQ在需要调用查询的时候才会真正的执行,以下是几个简单的例子:
1 using System; 2 using System.Linq; 3 4 class Test 5 { 6 static void Main() 7 { 8 //数据源 9 int[] numbers = new int[7]{ 0, 1, 2, 3, 4, 5, 6 }; 10 11 //创建查询,查询实际上还未执行 12 var query = 13 from num in numbers 14 where (num % 2) == 0 15 select num; 16 17 //执行查询 18 foreach (int num in query) 19 { 20 Console.WriteLine("{0}", num); 21 } 22 } 23 }
结果:
LINQ的语法和SQL比较像。
1 using System; 2 using System.Linq; 3 4 class Test 5 { 6 static void Main() 7 { 8 //数据源 9 int[] numbers = new int[7]{ 0, 1, 2, 3, 4, 5, 6 }; 10 11 //创建查询,查询实际上还未执行 12 var query = 13 from num in numbers 14 where (num % 2) == 0 15 select num; 16 17 numbers[0] = 10; 18 numbers[1] = 8; 19 20 //执行查询 21 foreach (int num in query) 22 { 23 Console.WriteLine("{0}", num); 24 } 25 } 26 }
结果:
可以看出LINQ的特点,即真正调用查询的时候,查询才会被执行。
上图:
若要强制立即执行任意查询并缓存其结果,可以调用 ToList<TSource> 或 ToArray<TSource> 方法。
1 using System; 2 using System.Linq; 3 using System.Collections.Generic; 4 5 class Test 6 { 7 static void Main() 8 { 9 int[] numbers = new int[7]{ 0, 1, 2, 3, 4, 5, 6 }; 10 11 List<int> query = 12 (from num in numbers 13 where (num % 2) == 0 14 select num).ToList(); 15 16 numbers[0] = 10; 17 numbers[1] = 8; 18 19 foreach (int num in query) 20 { 21 Console.WriteLine("{0}", num); 22 } 23 } 24 }
结果: