学习LINQ查询时,经常会遇到LINQ查询操作问题,这里将介绍LINQ查询操作问题的解决方法。
语言集成查询 (LINQ) 是 Visual Studio 2008 和 .NET Framework 3.5 版中一项突破性的创新,它在对象领域和数据领域之间架起了一座桥梁。
传统上,针对数据的查询都是以简单的字符串表示,而没有编译时类型检查或 IntelliSense 支持。此外,您还必须针对以下各种数据源学习不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等。LINQ 使查询成为 C# 和 Visual Basic 中的一等语言构造。您可以使用语言关键字和熟悉的运算符针对强类型化对象集合编写查询。用 C# 语言编写的、不完整的 LINQ 查询,该查询针对 SQL Server 数据库,并具有完全类型检查和 IntelliSense 支持。
LINQ查询操作由以下三个操作组成:
1、获取数据源:支持泛型 IEnumerable(Of (T)) 接口的所有对象都可以作为LINQ的数据源,包括Array、List等。
2、创建查询:指定要从数据源中检索的哪些信息,还可以指定在返回这些信息之前如何对其进行排序、分组或结构化。创建(定义)的查询通常存储在变量中,并不会在定义时马上执行而是在以后执行。所以记住:查询变量本身不会执行任何操作,也不会返回任何数据,它只是存储查询定义。
3、执行查询:执行查询有两种情况,1是延迟执行;2是立即执行。
3.1、延迟执行:查询定义并保存在查询定义变量后,不马上执行,而是在后续需要时才执行。这通常需要使用 For Each 循环(它返回值序列)或应用标准查询运算符。对于值序列,可使用 For Each 循环中的迭代变量(在上一个示例中为 number)访问所检索的数据。
3.2、立即执行:在立即执行过程中,查询在定义时执行。当应用需要访问查询结果的各个元素的方法时,就会触发执行。通常使用能够返回单个值的标准查询运算符之一来强制立即执行。Count、Max、Average 和 First 就属于标准查询运算符。只要应用了这些标准查询运算符以便计算并返回单一实例结果,这些运算符就会立即执行查询。例如:
Dim numbers中的偶数个数 = (From num In numbers _
Where num Mod 2 = 0 _
Select num).Count()
还可通过对查询(立即执行)或查询变量(延迟执行)调用 ToList 或 ToArray 方法来强制执行查询,如下面的代码所示:
Dim evensList = (From num In numbers _
Where num Mod 2 = 0 _
Select num).ToList()
以上介绍LINQ查询操作