Visual C# 2010程序设计教程 教学课件 ppt 作者 978-7-302-28609-7 ch14

上传人:E**** 文档编号:89351222 上传时间:2019-05-23 格式:PPT 页数:31 大小:411KB
返回 下载 相关 举报
Visual C# 2010程序设计教程 教学课件 ppt 作者 978-7-302-28609-7 ch14_第1页
第1页 / 共31页
Visual C# 2010程序设计教程 教学课件 ppt 作者 978-7-302-28609-7 ch14_第2页
第2页 / 共31页
Visual C# 2010程序设计教程 教学课件 ppt 作者 978-7-302-28609-7 ch14_第3页
第3页 / 共31页
Visual C# 2010程序设计教程 教学课件 ppt 作者 978-7-302-28609-7 ch14_第4页
第4页 / 共31页
Visual C# 2010程序设计教程 教学课件 ppt 作者 978-7-302-28609-7 ch14_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《Visual C# 2010程序设计教程 教学课件 ppt 作者 978-7-302-28609-7 ch14》由会员分享,可在线阅读,更多相关《Visual C# 2010程序设计教程 教学课件 ppt 作者 978-7-302-28609-7 ch14(31页珍藏版)》请在金锄头文库上搜索。

1、第14章 语言集成查询LINQ 本章要点: LINQ实现的基础 LINQ概述 LINQ 和泛型 LINQ查询步骤 LINQ查询语句 LINQ和数据库操作,14.1 LINQ实现的基础,.NET Frameword中的数据类型var被称为隐式类型,该关键字指示编译器根据初始化语句右侧的表达式推断变量的类型。推断类型可以是内置类型、匿名类型、用户定义类型、.NET Framework类库中定义的类型或任何表达式。 var i = 5; /定义了变量i被当做一个整数 var s = “Hello”; /定义的变量s被当做字符串 var a = new 0, 1, 2 ;/定义了一个变量a,为数组变量

2、 /定义了一个匿名类型的变量 var anon = new Name = “Terry”, Age = 34; var list = new List();/定义了一个List类型的变量,14.1.1 隐式类型变量,14.1 LINQ实现的基础,var关键字可以用在下列场合: 1 在定义局部变量中使用 2 在初始化for循环中计数器的起始值时使用 3. 在初始化foreach语句中的接收器对象中使用 4. 在using语句中使用 使用var隐式类型的变量声明时需要遵守一些基本规则 1. 只有在同一语句中声明和初始化局部变量时才能使用var 2. 不能将该变量初始化为null 3. 不能将var

3、用于类的字段 4. 由var声明的变量不能用在初始化表达式中 5. 不能在同一语句中初始化多个隐式类型的变量,14.1.1 隐式类型变量,14.1 LINQ实现的基础,匿名类型是从对象初始化器自动推断和生成的元组类型。可以在不声明一个类型的情况下而直接声明一个对象,因为只要利用初始化器指明的对象属性就可以来推断这个对象的类型。匿名类型只要使用没有类型名字的new表达式,并通过对象初始化器进行初始化即可。 var p = new X = 1,Y = 2 以上代码中并不存在对象p的这样一种类型,但却直接声明了该对象,并通过初始化器X = 1,Y = 2对该对象进行初始化,这就是匿名类型。,14.1

4、.2 匿名类型,14.1 LINQ实现的基础,var b1 = new Name = “The First Sample Book“, Price = 88.0f ; var b2 = new Price = 25.0f, Name = “The Second Sample Book“ ; var b3 = new Name = “The Third Sample Book“, Price = 35.00f ; Console.WriteLine(b1.GetType(); Console.WriteLine(b2.GetType(); Console.WriteLine(b3.GetType

5、(); 前面三行声明并初始化了三个具有匿名类型的对象,它们都将具有公共可读写属性Name和Price。我们可以看到,匿名类型的属性连类型都省掉了,完全是由编译器根据相应属性的初始化表达式推断出来的。,14.1 LINQ实现的基础,Lambda表达式是一种简洁的内联(in-line)函数,它提供了一个非常紧凑而且类型安全的方式来编写函数,该函数可以当做参数来传递并在以后进行运算。这种简洁的特性在编写LINQ查询表达式时极其有用。 一个Lambda表达式的语法: 参数列表 “=”符号 调用时要运算的表达式或语句块 params = expression 其中params是参数列表,expressi

6、on为表达式或语句块。,14.1.3 Lambda表达式,14.1 LINQ实现的基础,利用委托方法来搜索字符串数组中包含字符b的字符串数组 string list = new string “abc”,”abed”,”hebe”; string list1 = Array.FindAll(list, delegate(string s) /使用委托方法 return s.IndexOf(“b”) = 0; ); 使用Lambda表达式的实现代码 string list = new string “abc”,”abed”,”hebe”; string list1 = Array.FindAll

7、(list,s = (s.IndexOf(“b”) = 0); 使用Lambda表达式可以简化委托方法的编写,而且不像委托方法那样要求参数类型必须是明确指明,14.1 LINQ实现的基础,在LINQ中,CLR会自动把Lambda表达式过滤语句翻译成标准的SQL语句来操作数据库 NorthwindDataContext db = new NorthwindDataContext() ILnumerable staffs = db.Staffs.Where(s = s.Salary = 10000) 以上代码实现从数据表Staffs从获得Salary为10000及其以上的员工信息,实际上就等于“s

8、elect * from Staffs where Salary = 10000”的SQL查询语句。 Lambda表达式使得委托方法的实现变得更加方便,而且能够与LINQ更好的结合。,14.2 LINQ概述,LINQ是Language Integrated Qyery的缩写,中文名字是语言集成查询,它提供给开发人员一个统一的编程概念和语法,开发人员不需要关心将要访问的是关系数据库还是XML数据,或是远程的对象,它都采用同样的访问方式。 LINQ是一组系列技术,包括LINQ、DLINQ、XLINQ等。其中LINQ到对象是对内存进行操作,LINQ到SQL是对数据库的操作,LINQ到XML是对XML

9、数据进行操作。下页图描述了LINQ技术的体系结构。,14.2 LINQ概述,在Visual Studio 2010中,可以使用C#语言为各种数据源编写LINQ查询: 包括SQL Server数据库、XML文档、ADO.NET数据集以及支持IEnumerable接口(包括泛型)的任意对象集合。除了这几种常见的数据源之外,.NET Framework 4.0还为用户扩展LINQ提供支持,14.4 LINQ和泛型,LINQ查询基于泛型类型,而泛型这一新的数据类型从.NET Framework 2.0版开始出现的。使用时并不需要深入了解泛型的具体内容,就可以直接开始编写查询语句。 LINQ查询变量类型

10、化为IEnumerable或派生类型(如IQueryable接口)时,意味着在执行该查询时,该查询将生成包含零个或多个T对象的序列。 为了避免使用泛型语法,可以使用隐式类型来声明查询,即使用var关键字来声明查询。var关键字指示编译器通过查看在from子句中指定的数据来推断查询变量的类型,14.3 LINQ查询步骤,LINQ的查询操作通常由以下三个步骤组成: (1) 获得数据源。 (2) 创建查询。 (3) 执行查询。 string word = “One”,“Two”, “Three”, “Four”, “Five”,“Six”; var result =from s in word /从

11、word数组中查询字符串 where s.Length = 3 /条件是字符串长度是3 select s; /返回查询结果 foreach (var s in result) /输出结果 Response.Write(s); 上面的代码中,word数组是数据源,第二句代码则创建了查询,第三句代码则执行了查询。,14.5 LINQ查询语句,LINQ最明显的“语言集成”部分是查询表达式。查询表达式使用声明性查询语法编写。通过使用查询语法,开发人员可以使用最少的代码对数据源执行复杂的筛选、排序和分组操作。 查询表达式是由查询关键字和对应的操作数组成的表达式整体,其中,查询关键字是常用的查询运算符。C

12、#为这些运算符提供对应的关键字,从而能更好的与LINQ集成。 查询表达式必须以from为关键字的子句开头,并且必须以select或group关键字的子句结尾。在第一个from子句和最后一个select或group子句之间,查询表达式可以包含一个或多个由下列关键字组成的可选子句:where、orderby、join、let,甚至可以包括附加的from子句。同时还可以使用into关键字使join或group子句的结果能够作为同一查询表达式中附加查询子句的数据源。,14.5 LINQ查询语句,14.5.1 from子句 查询表达式必须以from子句开头,它同时指定了数据源和范围变量。 单个的from

13、子句 LINQ查询表达式中只包含一个from子句。一般情况下,单个from子句查询往往使用一个数据源。 多个from子句 在LINQ查询表达式中包含多个from子句。一般情况下,包含多个from子句的查询往往使用多个数据源。 复合from子句 在一些情况下,数据源的元素也是一个数据源(子数据源)。如果要查询子数据源中的元素,则需要使用复合from子句。,14.5.2 select子句 使用select子句可以查询所有类型的数据源。它可以指定查询结果的类型和表现形式。简单的select子句只能查询与数据源中所包含的元素具有相同类型的对象。一个LINQ表达式可以不包含select子句,也可以包含一

14、个select子句。 14.5.3 group 子句 使用group子句可以对查询的结果进行分组,并返回元素类型为IGrouping的对象序列。其中Key参数指定元素的键的类型,可以采用任何数据类型,TElement参数指定元素值的类型。,14.5 LINQ查询语句,14.5.4 where子句 where子句是通过条件的设定对查询的结果进行过滤,筛选元素满足的逻辑条件,从数据源中排除指定的元素。where子句一般由逻辑运算符组成。一个查询表达式可以包含1个或多个where子句,甚至不包含where子句。每个where子句可以包含一个或多个布尔条件表达式。 14.5.5 orderby子句 使

15、用orderby子句可以很方便地对返回的查询数据按照关键字(或键)进行排序。其中,排序方式可以为“升序”或“降序”,排序的关键字(或键)可以为一个或多个。 。,14.5 LINQ查询语句,14.5.6 join子句 join子句可以将来自不同数据源中没有直接关系的元素进行关联,但是要求二个不同数据源中必须有一个相等元素的值。join子句可以为数据源之间建立以下3种联接关系。 (1)内部联接:二个数据源必须都存在相同的值,即二个数据源都必须存在满足联接关系的元素。 (2)分组联接,即为含有into子句和join子句。 (3)左外部联接,和SQL语句中的“INNER LEFT子句”比较相似。 14

16、.5.7 into子句 into子句可以创建一个临时标识符,使用该标识符可以存储group、join或select子句查询结果。,14.5 LINQ查询语句,14.5.8 let子句 let子句可以创建一个范围变量,使用该变量可以保存表达式中的中间结果。 using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 class Program /定义学生类,并定义三个类属性。 public class Student public string name get; set; public int age get; set; public string address get; set;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号