资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
本章讲述的主要内容 11.1 LINQ的概念 11.2 使用LINQ查询 11.3 对象关系模型与O/R设计器 11.4 使用LINQ to SQL操作数据库,11.1 LINQ的概念,11.1.1 LINQ的构成,11.1 LINQ的概念,11.1.2 与LINQ相关的几个概念 1. 对象初始化器 在不使用对象初始化器时,为对象的属性赋值需用如下所示的语句: Dim stu As New Student:stu.Name = “zhangsan “:stu.Age = 20 若使用对象初始化器,则可在初始化对象时直接为对象的属性赋值: 若使用对象初始化器,则可在初始化对象时直接为对象的属性赋值: 注意不要忽略了属性名前的“.”符号 Dim stu As New Students With .StuAge = 20, .StuName = “zhangsan“,11.1 LINQ的概念,11.1.2 与LINQ相关的几个概念 2. 匿名类型 “匿名类型”也称为“隐式类型”或“推断类型”,如果在程序中需要使用到临时类型,而又不希望去创建相应的类时,可以考虑使用匿名类型。 匿名类型使用var关键字进行声明,例如: Dim 匿名类型对象名 = New With .属性1 = 属性值1, .属性n = 属性值n,11.1 LINQ的概念,11.1.2 与LINQ相关的几个概念 3. 扩展方法 使用扩展方法可以为一些现有的类增加某种特定的功能。需要注意的是,扩展方法必须创建在模块中,而且需要在模块文件中添加对System.Runtime.CompilerServices命名空间的引用,声明扩展方法的语句也需要使用“”作为修饰符。 Module 模块名称 Function | Sub 扩展方法名(ByVal 形参 As 作用类型) As 返回值类型 扩展方法的方法体语句 End Function | Sub End Module,11.1 LINQ的概念,11.1.2 与LINQ相关的几个概念 4. Lambda表达式 Lambda表达式是.NET Framework 3.5的一个新特性,它提供了一种极为简洁的定义方法的方式。Lambda表达式使用Function关键字以匿名的方式定义和调用方法。需要注意的是,Lambda表达式仅是一个表达式所以它只能用作语句的一部分,不能单独使用。 例如,下列语句中“=”右边就是一个Lambda表达式,该表达式递增其参数并返回递增后的值。 Add为一个匿名类型的变量 Dim Add = Function(num As Integer) num + 1 【演练11-2】,11.2 使用LINQ查询,11.2.1 使用LINQ查询表达式 每个查询关键字对应一个LINQ查询子句,各子句都具有明确的功能,将这些子句组合到一起就构成了一个完整且具有特定功能的的LINQ查询。常用的LINQ查询子句及其功能说明见下表。,11.2 使用LINQ查询,11.2.1 使用LINQ查询表达式 1. 最基本的LINQ查询表达式 所谓最基本的LINQ查询表达式是指表达式中仅包含一个from子句和一个select子句。其语法格式为: From 变量 In 数据源 Select 表达式 From子句使用“变量”逐个读取“数据源”的各元素,而“表达式”用来对From子句中的“变量”进行某种计算以得到返回结果。 2. 使用Where子句指定过滤条件 对数据源中的数据进行过滤是常见的应用,也是查询的最基本功能之一。在LINQ查询表达式中Where子句的位置应在From子句之后,在Select子句之前。其语法格式为: From 变量 In 数据源 Where 条件表达式 Select 表达式,11.2 使用LINQ查询,11.2.1 使用LINQ查询表达式 3. 使用Order By子句实现查询结果排序 对查询结果集中的元素进行排序是常见的辅助操作之一,Order By子句一般应放在Where子句之后(如果有的话),放在Select子句之前。使用Order By子句实现结果集排序的语法格式为: From 变量 In 数据源 Order By 排序表达式 排序方式 Select 表达式 其中:“排序表达式”是针对From子句中变量的表达式,可以就是变量本身或对变量进行运算的表达式。 可选项“排序方式”表示按升序(Ascending)或降序(Descending)排列结果集,默认值为升序。,11.2 使用LINQ查询,11.2.2 使用LINQ方法 使用前面介绍过的LINQ查询表达式进行查询时,由于表达式语法上的限制一些复杂的查询很难实现。为解决这一问题LINQ还提供了一套通过使用C#代码编写的方法进行查询的方式。 1. 使用Where()方法 2. 使用Single()和SingleOrDefault()方法 3. 其它常用方法 Average()、Min()、Max()、Sum()、Skip(n)、SkipWhile(条件) Distinct()等。,11.3 对象关系模型与O/R设计器,11.3.1 了解对象关系模型 1. 对象模型的原理 下图所示的是LINQ to SQL对象模型的原理,从图中可以看到LINQ to SQL包含两个重要的组件,对象模型(Object Model)和运行时接口(Runtime)。前者为开发人员提供容易理解的基于编程语言的对象访问模式和开发接口,后者为对象模型和数据库管理系统提供映射功能。,11.3 对象关系模型与O/R设计器,11.3.1 了解对象关系模型 2. 对象模型的创建方法 通常,开发人员可以通过以下3种方式创建LINQ to SQL对象模型。 1) 使用对象关系设计器(O/R设计器):最适合中小型数据库应用程序开发。 2) 使用SQL Metal代码生成工具:SQL Metal代码生成工具是一个使用的命令行工具,它的功能与O/R设计器的功能基本相同,但SQL Metal更加灵活。由于SQL Metal是一个命令行工具,没有图形化的操作界面,使用起来不是很方便。 3) 代码编辑器:开发人员可以在Visual Studio代码编辑窗口或其他代码编辑器中直接编写对象模型的代码。一般用来修改O/R设计器或SQL Metal生成的对象模型代码。,11.3 对象关系模型与O/R设计器,11.3.2 使用O/R设计器 在Visual Studio 2008及以上版本中,LINQ to SQL的所有功能都需要通过一个名为“DataContext”的类来实现,而O/R设计器就是专门用于创建使用LINQ to SQL所必须的DataContext类的一个工具。 当我们向Windows应用程序项目中添加一个“LINQ to SQL类”时,系统将自动打开O/R设计器,只需要将数据表、存储过程等从服务器资源管理器中拖动到O/R设计器中即可自动创建DataContext类。,11.3 对象关系模型与O/R设计器,11.3.3 了解DBML文件 下图所示的是将StuInfo表添加到O/R设计器后,使用Windows“记事本”程序打开DBML文件时看到的内容。,11.4 使用LINQ to SQL操作数据库,11.4.1 查询数据库记录 在使用LINQ to SQL进行数据库操作前,必须保证已正确的创建了DataContext类和数据表实体类(如本例由O/R设计器生成的DataClassesDataContext类和StuInfo类)。 使用LINQ to SQL进行查询的基本操作步骤如下: 1) 创建DataContext类和数据表实体类,这一步一般可通过O/R设计器来完成。有关LINQ to SQL的其他操作这一步也是必须的,今后不再赘述。 2) 实例化DataContext类。 3) 使用LINQ to SQL查询语句或方法返回查询结果集。 4) 输出查询结果。,11.4 使用LINQ to SQL操作数据库,11.4.2 插入新记录 使用LINQ to SQL向数据表中插入一条记录的方法十分简单,在创建了DataContext类和数据表实体对象后,只要创建一个数据表对象的实例,并为该实例的各个字段赋值,最后调用数据表对象的InsertOnSubmit方法将数据表对象实例添加到表,最后再调用DataContext类对象的SubmitChanges更新数据库即可。,11.4 使用LINQ to SQL操作数据库,11.4.3 修改记录 使用LINQ to SQL技术修改数据库记录的操作与添加新记录十分相似。在创建了DataContext类和数据表实体对象后,首先需要查询到希望修改的记录,而后为查询结果对象中的各个字段赋以新值,最后调用DataContext类对象的SubmitChanges方法即可。,11.4 使用LINQ to SQL操作数据库,11.4.4 删除记录 使用LINQ to SQL技术删除数据库记录的操作与更新记录十分相似。在创建了DataContext类和数据表实体对象后,首先需要查询到希望修改的记录,而后调用数据表实体对象的DeleteOnSubmit方法,最后调用DataContext类对象的SubmitChanges方法即可。,11.4 使用LINQ to SQL操作数据库,11.4.5 使用LINQ to SQL直接执行SQL语句 1. GetCommand方法 GetCommand()方法用于提供有关由LINQ to SQL生成的SQL命令的信息。使用该方法可以帮助程序员了解LINQ to SQL在后台具体的执行情况,这对程序查错是很有帮助的。 2. ExecuteCommand方法 DataContext类提供的ExecuteCommand()方法可用于直接对数据库执行一个没有返回值的SQL命令。注意,在书写SQL语句时表名称、字段名需要用方括号“”将其括起来。 3. ExecuteQuery方法 DataContext类提供的ExecuteQuery()方法用于直接执行一个SQL查询,该方法返回一个IEnumerable类型的泛型集合。,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号