第 21章 使用 LINQ查询 了解了基本的 LINQ 基本概念,以及 Lambda 表达式基础后,就能够使用 LINQ 进行应用程序开发。LINQ 使用了 Lambda 表达式,以及底层接口实现了对集合的访问和查询,开发人员能够使用 LINQ 对不同的对象,包括数据库、数据集和 XML 文档进行查询。 21.1 LINQ 查询概述 LINQ 可以对多种数据源和对象进行查询,如数据库、数据集、XML 文档甚至是数组,这在传统的查询语句中是很难实现的。如果有一个集合类型的值需要进行查询,则必须使用 Where 等方法进行遍历,而使用 LINQ 可以仿真 SQL 语句的形式进行查询,极大的降低了难度。 21.1.1 准备数据源 既然 LINQ 可以查询多种数据源和对象,这些对象可能是数组,可能是数据集,也可能是数据库,那么在使用 LINQ 进行数据查询时首先需要准备数据源。 1.数组 数组中的数据可以被 LINQ 查询语句查询,这样就省去了复杂的数组遍历。数组数据源示例代码如下所示。 string[] str = { "学习", "学习 LINQ", "好好学习", "生活很美好" }; int[] inter = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 数组可以看成是一个集合,虽然数组没有集合的一些特性,但是从另一个角度上来说可以看成是一个集合。在传统的开发过程中,如果要筛选其中包含“学习”字段的某个字符串,则需要遍历整个数组。 2.SQL Server 在数据库操作中,同样可以使用 LINQ 进行数据库查询。LINQ 以其优雅的语法和面向对象的思想能够方便的进行数据库操作,为了使用 LINQ 进行 SQL Serv er 数据库查询,可以创建两个表,这两个表的结构如下所示。Stu dent(学生表): S_ID:学生 ID。 S_NAME:学生姓名。 S_CLASS:学生班级。 C_ID:所在班级的 ID。 上述结构描述了一个学生表,可以使用 SQL 语句创建学生表,示例代码如下所示。 USE [student] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO 510 CREATE TABLE [dbo].[Student]( [S_ID] [int] IDENTITY(1,1) NOT NULL, [S_NAME] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL, [S_CLASS] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL, [C_ID] [int] NULL, CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED ( [S_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,...