LINQ技术及编程.ppt
《LINQ技术及编程.ppt》由会员分享,可在线阅读,更多相关《LINQ技术及编程.ppt(93页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、LINQ从入门到精通天津理工大学华信软件学院 张一鸣LINQLINQLINQLINQ从入门到精通从入门到精通从入门到精通从入门到精通WebWebWebWeb开发框架技术初级开发框架技术初级开发框架技术初级开发框架技术初级天津理工大学华信软件学院天津理工大学华信软件学院天津理工大学华信软件学院天津理工大学华信软件学院 张一鸣张一鸣张一鸣张一鸣2011201120112011年年年年6 66 6月月月月24242424日日日日1 1LINQ从入门到精通天津理工大学华信软件学院 张一鸣第一章第一章第一章第一章 LINQ LINQ LINQ LINQ简介简介简介简介2011201120112011年年
2、年年6 6 6 6月月月月24242424日日日日WebWeb开发框架技术初级开发框架技术初级2 2LINQ从入门到精通天津理工大学华信软件学院 张一鸣本章主要内容本章主要内容本章主要内容本章主要内容本章主要介绍本章主要介绍LINQ的基本概念和组成,它的的基本概念和组成,它的工作原理,以及几种不同的实现形式。工作原理,以及几种不同的实现形式。语言集成语言集成LINQ如何工作如何工作LINQLINQ是什么是什么为什么需要为什么需要LINQLINQ语言集成语言集成3 3LINQ从入门到精通天津理工大学华信软件学院 张一鸣LINQLINQLINQLINQ?LINQ LINQ是是Language In
3、tegrated QueryLanguage Integrated Query的缩写,意即的缩写,意即语言集成查询)语言集成查询)。它有许多种解释,例如:。它有许多种解释,例如:LINQ是各种类型数据的统一编程模型。它允许使用是各种类型数据的统一编程模型。它允许使用独立于数据源的一致模型查询和操作数据。独立于数据源的一致模型查询和操作数据。LINQ是另外一种可以把是另外一种可以把SQL查询嵌入代码的工具。查询嵌入代码的工具。LINQ是另外一种数据抽象层。是另外一种数据抽象层。所有这些说明在某种程度上是正确的,但是都只说所有这些说明在某种程度上是正确的,但是都只说明了明了LINQ的一个方面。实际
4、上,的一个方面。实际上,LINQ是一种全新的是一种全新的查询工具。查询工具。4 4LINQ从入门到精通天津理工大学华信软件学院 张一鸣1.1 LINQ1.1 LINQ1.1 LINQ1.1 LINQ是什么是什么是什么是什么LINQ是一个把查询当作头等概念引入所有微软是一个把查询当作头等概念引入所有微软.NET语语言的编程模型。但是,现有的编程语言完全支持言的编程模型。但是,现有的编程语言完全支持LINQ还需还需要添加一些扩展内容。经过扩展,要添加一些扩展内容。经过扩展,LINQ提供了一种简化和提供了一种简化和统一各种类型数据访问实现的方法。它可以很容易地利用统一各种类型数据访问实现的方法。它可
5、以很容易地利用几种现有的体系结构来访问数据,例如:几种现有的体系结构来访问数据,例如:pRAD/原型原型p客户端客户端/服务器服务器p三层三层/多层体系结构多层体系结构p智能客户端智能客户端5 5LINQ从入门到精通天津理工大学华信软件学院 张一鸣LINQLINQLINQLINQ和和和和.NET.NET.NET.NET语言的关系语言的关系语言的关系语言的关系启用启用LINQ的数据源的数据源ADO.NETLINQ技术技术C#其他其他VB.NET语言集成查询语言集成查询LINQLINQtoDataSetLINQtoSQLLINQtoEntitiesLINQtoObjectsLINQtoXML启用启
6、用LINQ的数据源的数据源ADO.NETLINQ技术技术对象对象关系关系XML6 6LINQ从入门到精通天津理工大学华信软件学院 张一鸣.NETNETNETNET各个版本的关系各个版本的关系各个版本的关系各个版本的关系NET2.0CLRWinFormsWebServicesASP.NETNET3.0WCFWFWPFCardSpaceLINQAJAXRESTNET3.5.NET2.0是整个是整个.NET的核心的核心.NET3.0是在是在.NET2.0的基础的基础上增加了上增加了WPF、WCF、WF、CardSpace等跟等跟Vista有关有关的组件的组件.NET3.5除了包含除了包含.NET3.
7、0的的全部功能外,增加了对全部功能外,增加了对LINQ、Ajax等技术支持的全新框架等技术支持的全新框架库和编译器库和编译器7 7LINQ从入门到精通天津理工大学华信软件学院 张一鸣LINQLINQLINQLINQ的发展经历的发展经历的发展经历的发展经历作为微软作为微软作为微软作为微软Visual Studio 2005Visual Studio 2005的的的的扩展内容以技术预览的形式首先发布扩展内容以技术预览的形式首先发布扩展内容以技术预览的形式首先发布扩展内容以技术预览的形式首先发布200820082007.112005.9包含了包含了包含了包含了LINQ to ObjectsLINQ
8、to Objects和和和和LINQ to ADO.ENTLINQ to ADO.ENT三大模块三大模块三大模块三大模块块后正式发布块后正式发布块后正式发布块后正式发布增加增加增加增加LINQ to EntitiesLINQ to Entities组件及扩展后发布组件及扩展后发布组件及扩展后发布组件及扩展后发布8 8LINQ从入门到精通天津理工大学华信软件学院 张一鸣1.2 1.2 1.2 1.2 为什么需要为什么需要为什么需要为什么需要LINQLINQLINQLINQ原来的原来的SQL只能访问包含在结构化的关系型数只能访问包含在结构化的关系型数据库中的数据。但是现实世界中,数据可以存储在据库
9、中的数据。但是现实世界中,数据可以存储在各种各样的数据源中,比如数组、对象图、各种各样的数据源中,比如数组、对象图、XML文文档、数据库、文本文件、注册表项、网页、电子邮档、数据库、文本文件、注册表项、网页、电子邮件信息、简单对象访问协议(件信息、简单对象访问协议(SOAP)消息内容、)消息内容、微软的微软的Excel电子表等,特别是大量非结构化数据,电子表等,特别是大量非结构化数据,都是用都是用SQL无法访问的。无法访问的。9 9LINQ从入门到精通天津理工大学华信软件学院 张一鸣例子例子例子例子1.1 1.1 1.1 1.1 一个简单的一个简单的一个简单的一个简单的LINQLINQLINQ
10、LINQ查询程序查询程序查询程序查询程序usingSystem;usingSystem.Linq;stringgreetings=“helloworld”,“helloLINQ”,“helloApress”;varitems=fromsingreetingswheres.EndsWith(“LINQ”);selects;foreach(variteminitems)Console.WriteLine(item);在在vs2008中创建这个工程,编辑程序、编译、链接,执行,在中创建这个工程,编辑程序、编译、链接,执行,在具有三个元素的字符串数组执行具有三个元素的字符串数组执行LINQ查询。显示结
11、果为:查询。显示结果为:helloLINQ1010LINQ从入门到精通天津理工大学华信软件学院 张一鸣访问数据源的数据模型访问数据源的数据模型访问数据源的数据模型访问数据源的数据模型每种数据源都有自己特有的数据访问模型。比每种数据源都有自己特有的数据访问模型。比如,查询数据库时,一般都使用如,查询数据库时,一般都使用SQL,操纵,操纵XML数数据时,则使用文档对象模型据时,则使用文档对象模型MOD或或XPath/XQuery。使用不同的编程模型可以访问不同的数据源。但是使用不同的编程模型可以访问不同的数据源。但是这造成程序员在编写程序时,当访问不同的数据源这造成程序员在编写程序时,当访问不同的
12、数据源时,要采用不同的方法编写,增加了开发、调试和时,要采用不同的方法编写,增加了开发、调试和维护的工作量与复杂性。维护的工作量与复杂性。为了解决这个问题,软件界做了大量工作,尝为了解决这个问题,软件界做了大量工作,尝试把各种数据访问技术统一成一个综合的模型,如试把各种数据访问技术统一成一个综合的模型,如利用利用Windows管理规范以管理规范以ODBC访问访问Excel等。等。1111LINQ从入门到精通天津理工大学华信软件学院 张一鸣LINQLINQLINQLINQ技术的独特方法技术的独特方法技术的独特方法技术的独特方法LINQ在总结了以前的经验后,没有走统一各种不同在总结了以前的经验后,
13、没有走统一各种不同的数据模型的结构从而建立一个的数据模型的结构从而建立一个“通用通用”模型的方法,模型的方法,而是利用不同数据模型中操作具有的通用功能来实现这而是利用不同数据模型中操作具有的通用功能来实现这个目的。个目的。换句话说,使用换句话说,使用LINQ时,仍然维持现有的各种数据时,仍然维持现有的各种数据结构,比如类或表,并且不管这些数据类型表示何种物结构,比如类或表,并且不管这些数据类型表示何种物理意义,但是都用统一的查询语法对异种数据进行查询理意义,但是都用统一的查询语法对异种数据进行查询。例如对于内存中的数组和数据库中的关系表中的数据。例如对于内存中的数组和数据库中的关系表中的数据,
14、使用,使用LINQ就可以对他们使用相同的查询语法。就可以对他们使用相同的查询语法。1212LINQ从入门到精通天津理工大学华信软件学院 张一鸣例子例子例子例子1.2 1.2 1.2 1.2 一个简单一个简单一个简单一个简单LINQLINQLINQLINQ查询查询查询查询设计一个设计一个LINQ查询,在查询,在Customers数据表中搜索所属国籍数据表中搜索所属国籍是意大利的那些公司的名称,代码如下所示:是意大利的那些公司的名称,代码如下所示:varquery=fromcinCustomerswherec.Country=“Italy”selectc.CompanyName;该查询返回的结果是
15、一个字符串列表,可以用该查询返回的结果是一个字符串列表,可以用C#语句按照语句按照枚举的方式显示这些返回值,即:枚举的方式显示这些返回值,即:foreach(stringnameinquery)Console.WriteLine(name);1313LINQ从入门到精通天津理工大学华信软件学院 张一鸣简单简单简单简单LINQLINQLINQLINQ查询的说明查询的说明查询的说明查询的说明1.var、query和和foreach都是标准的都是标准的C#3.0的的语句,分别表示执行的语句,分别表示执行的LINQ查询和对于对查询和对于对象的循环控制。在其中添加一个名为象的循环控制。在其中添加一个名为
16、Search.ascx的文件的文件2.c、Customers是已定义的实体类。是已定义的实体类。3.from、where、select都是都是LINQ的关键字,的关键字,分别表示指定数据源、查找条件和确定要查分别表示指定数据源、查找条件和确定要查找的数据内容。找的数据内容。1414LINQ从入门到精通天津理工大学华信软件学院 张一鸣关于关于关于关于CustomersCustomersCustomersCustomers的讨论的讨论的讨论的讨论上例中的上例中的Customers可以是:可以是:对象集对象集,例如:,例如:CustomerCustomers;数据集中的数据集中的DataTable,
17、例如:,例如:DataSetds=GetDataSet();DataTableCustomers=ds.Tables“Customers”;描述描述关系型数据库中物理表的实体类关系型数据库中物理表的实体类,例如:,例如:DataContextdb=newDataContext(ConnectionString););TableCustomers=db.GetTable();描述描述概念模型并被映射到关系型数据库中的实体类概念模型并被映射到关系型数据库中的实体类,例如:,例如:NorthwindModeldataModel=newNorthwindModel();ObjectQueryCusto
18、mers=dataModel.Customers;1515LINQ从入门到精通天津理工大学华信软件学院 张一鸣LINQLINQLINQLINQ构件块、构件块、构件块、构件块、LINQLINQLINQLINQ提供器和相应数据源提供器和相应数据源提供器和相应数据源提供器和相应数据源LINQ构件块构件块编程语言:编程语言:C#VB.NETOthers标准查询操作符标准查询操作符查询表达式查询表达式表达式树表达式树LINQ提供器提供器LINQtoDataSetLINQtoSQLLINQtoEntitiesLINQtoObjectsLINQtoXML数据源数据源对象对象RDBMSXMLDataSetAD
19、O.NETEntity框架框架?Others1616LINQ从入门到精通天津理工大学华信软件学院 张一鸣我们知道,在一般编程语言中执行我们知道,在一般编程语言中执行SQL查询时,查询时,是把是把SQL语句嵌入到程序中。这些语句嵌入到程序中。这些SQL语句没有集语句没有集成到编程语言本身的语法和类型系统当中,因此编成到编程语言本身的语法和类型系统当中,因此编程和调试时都比较麻烦。程和调试时都比较麻烦。与与SQL不同,不同,LINQ则是集成到开发语言当中的则是集成到开发语言当中的查询语言,而且它不仅局限于查询数据库,还可以查询语言,而且它不仅局限于查询数据库,还可以查询对象、实体、查询对象、实体、
20、XML文档等非结构化的数据。文档等非结构化的数据。那么,那么,LINQ是如何工作的呢是如何工作的呢?1.3 LINQ1.3 LINQ1.3 LINQ1.3 LINQ如何工作如何工作如何工作如何工作1717LINQ从入门到精通天津理工大学华信软件学院 张一鸣LONQLONQLONQLONQ查询的处理过程查询的处理过程查询的处理过程查询的处理过程使用使用LINQ编写查询代码时,如下例:编写查询代码时,如下例:C#编译器会生成下列代码:编译器会生成下列代码:CustomerCustomers=GetCustomers();varquery=fromcinCustomerswherec.Country
21、=“Italy”orderbyc.Nameselectnewc.Name,c.City;CustomerCustomers=GetCustomers();IEnumerableCustomerquery=Customers.where(c=c.Country=“Italy”);.OrderBy(c=c.Name).Select(c=newc.Name,c.City;1818LINQ从入门到精通天津理工大学华信软件学院 张一鸣LINQLINQLINQLINQ对宿主语言的扩展对宿主语言的扩展对宿主语言的扩展对宿主语言的扩展从上面的例子可见,首先在从上面的例子可见,首先在Customers上调用上调
22、用Where,然后在然后在Where返回的对象上调用返回的对象上调用OrderBy进行排序,最后进行排序,最后在在OrderBy返回的对象上调用返回的对象上调用Select。这是由使用的宿主。这是由使用的宿主语言(语言(C#)中的扩展方法()中的扩展方法(LINQ)在管理这种查询行为。)在管理这种查询行为。该例子中的查询调用的该例子中的查询调用的Where、OrderBy、Select方法方法的实现形式,取决于的实现形式,取决于Customers的类型(即前述的对象集、的类型(即前述的对象集、数据表、关系型数据库中物理表的实体类、概念模型并被数据表、关系型数据库中物理表的实体类、概念模型并被映
23、射到关系型数据库中的实体类),同时也取决于相关的映射到关系型数据库中的实体类),同时也取决于相关的using语句指定的命名空间。扩展方法是语句指定的命名空间。扩展方法是LINQ使用的基础使用的基础语法特征,语法特征,LINQ就是采用这种相同的语法来操作不同的数就是采用这种相同的语法来操作不同的数据源。据源。1919LINQ从入门到精通天津理工大学华信软件学院 张一鸣LINQLINQLINQLINQ对于数据的适时操作对于数据的适时操作对于数据的适时操作对于数据的适时操作LINQ查询只有在需要使用其返回结果时才会执行,否则查询只有在需要使用其返回结果时才会执行,否则它不会被执行。例如,下面的例子中
24、,仅当执行它不会被执行。例如,下面的例子中,仅当执行foreach循循环语句时才执行环语句时才执行LINQ访问:访问:varquery=fromcinCustomers(非冯结构)(非冯结构)foreach(stringnameinquery)迭代迭代LINQ查询返回结果并在内存中生成持久性数据副本查询返回结果并在内存中生成持久性数据副本的方法也是这样:的方法也是这样:varquery=fromcinCustomers(非冯结构)(非冯结构)ListCustomers=query.ToList(););2020LINQ从入门到精通天津理工大学华信软件学院 张一鸣LINQLINQLINQLINQ
25、对于数据库的延迟访问对于数据库的延迟访问对于数据库的延迟访问对于数据库的延迟访问当当LINQ查询操作关系型数据库(比如查询操作关系型数据库(比如SQLServer)中)中的数据时,它将生成等价的的数据时,它将生成等价的SQL语句,而不会操作内存语句,而不会操作内存中的数据表的副本。中的数据表的副本。并且,并且,LINQ对数据库的查询将被延迟,直至首次访问该对数据库的查询将被延迟,直至首次访问该查询结果为止。查询结果为止。若前两个例子中,若前两个例子中,Customers是是Table类型类型(物理表)或(物理表)或ObjectQuery类型(概念实类型(概念实体),在执行体),在执行forea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LINQ 技术 编程
限制150内