最近一直利用业余的时间来研究Linq,估计这样的文章在对于园子里很多牛人来说就有点小儿科了,前段时间写了一个Linq To Sql体验的小例子,感觉很简洁程序上操作体验不错,我写这些的文章目的是自我学习笔记的备用和查看,当然是初学者很多地方理解不是很到位,若又偏差还请各位原谅并指出,也欢迎各位上来拍砖。

LINQ(发音:Link)是Language Integrated Query的简称,其中Integrated(adj/综合的,组合的) Query(n/问题.疑问),它是集成在.NET编程语言(例如:C#、VB.NET等)中的一种特性,目的是为.NET Framework提供更加通用和便利的信息查询方式,并且它对数据源提供了广泛的支持,而不仅仅局限于关系型数据库和XML

经过了最近 20 年,面向对象编程技术( object-oriented (OO) programming technologies )在工业领域的应用已经进入了一个稳定的发展阶段。程序员现在都已经认同像 类(classes)、对象(objects)、方法(methods)这样的语言特性。考察现在和下一代的技术,一个新的编程技术的重大挑战开始呈现出来,即面向对象技术诞生以来并没有解决降低访问和整合信息数据( accessing and integrating information )的复杂度的问题。其中两个最主要访问的数据源与数据库( database )和 XML 相关

LINQ 提供了一条更常规的途径即给 .Net Framework 添加一些可以应用于所有信息源( all sources of information )的具有多种用途( general-purpose )的语法查询特性( query facilities ),这是比向开发语言和运行时( runtime )添加一些关系数据( relational )特性或者类似 XML 特性( XML-specific )更好的方式。这些语法特性就叫做 .NET Language Integrated Query (LINQ)

来看一张Linq架构图:

什么是Linq_classes

LINQ是随.Net Framework3.5发布的微软的一项新技术。她的查询操作可以通过编程语言自身来传达,而不是像以往的查询那样通过字符串嵌入到应用程序代码中.

从上图可以很清晰看出Linq中五大组件,即Linq具有五大功能:

(1)Linq to Objects:处理对象和集合数据,即我们在程序中可以类似于,像我们在数据中通过SQL语句来查询Table中数据一样来查询我们的对象和集合。

(2)Linq to DataSets:查询DataSets对象数据,它针对任何形式的数据源都提供统一的查询方式,统一的语法,所以针对DataSets也是一样,我们可以很方便的操作

(3)Linq to Sql:全称基于关系数据的.NET语言集成查询,用以对象形式管理数据,并提供了丰富的查询功能,即我们对数据库查询基本可以实现和ADO一样的功能。但与其相比操作更加简单,过程更加集中,尤其是对数据库表和对象进行查询时,可以说有在数据库中操作的感觉

(4)Linq to XML:针对XML形式的数据,LINQ给出了更为简便的查询,使我们操作XML可以像操作Table一样得心应手

 (5)Linq to Entites:针对实体查询操作

LINQ定义了一组标准查询操作符用于在所有基于.NET平台的编程语言中更加直接地声明跨越、过滤和投射操作的统一方式,标准查询操作符允许查询作用于所有基于IEnumerable<T>接口的源,并且它还允许适合于目标域或技术的第三方特定域操作符来扩大标准查询操作符集,更重要的是,第三方操作符可以用它们自己的提供附加服务的实现来自由地替换标准查询操作符,根据LINQ模式的习俗,这些查询喜欢采用与标准查询操作符相同的语言集成和工具支持。

查询架构(图1)的延展性用来向LINQ提供SQL数据以及XML之上的工作实现。针对XML的查询操作符(LINQ to XML)采用一种高效、易用、内存中的XML工具在宿主编程语言中提供XPath/XQuery功能;针对关系型数据的查询操作符(LINQ to SQL)建立于公共语言类型系统中的基于SQL的模式定义的集成之上,当保持关系型模型表达能力和对底层存储的直接查询评测的性能时,这个集成在关系型数据之上提供强类型。

总而言之:LINQ是一种查询技术,由微软提供,她的最大亮点就是,就是将查询操作集成到开发环境中,成为开发语言的一部分,我们可以像写代码一样来创建查询操作或表达式