`
sunqing0316
  • 浏览: 37594 次
  • 性别: Icon_minigender_2
文章分类
社区版块
存档分类
最新评论

初识LINQ

 
阅读更多

概念

	不管进行何种类型的项目开发,都不可避免的要和数据打交道。而数据的来源又是多样化的,比如内存中的一个集合、数据库、XML文件、Execl表格等等。但是不管是什么数据源,都要实现对数据的操作:查询、排序等等。这些操作的实现方式会因数据源的不同而不同。因为不统一,没有一个普世标准,必然会在开发上给开发人员造成麻烦。那么这个问题怎么解决呢?在.NET 3.5 中引入了一项新的技术——LINQ。

LINQ(Language Integrated Query)语言集成查询。它为查询各种数据源提供了一个同样的接口。通过这个接口,查询各种数据源可以使用近乎一致的方式和语法。既然是一个接口,那么就有接口的调用者和提供者。接口的调用者通常是应用程序,对它们来说,接口的使用方式是一致的。对于接口的提供者,则根据各种不同的数据源有着各自不同的实现(这一点个人感觉和多态是一样的)。根据数据源的不同,LINQ也产生了相应的分支:LINQ to Objects、LINQ to SQL、LINQ to XML、LINQ to Entities、LINQ toExcel等等。

	那么,它到底使用了什么技术才能提供统一的接口?因为LINQ使用了以下几个关键技术

泛型和委托

	咱们来看一下从非泛型委托到LINQ中使用委托的演化过程
	非泛型委托:public delegate bool Predicate(string obj);在该定义中,入口参数的类型是明确的,所以,当类型改变以后就需要重新定义一个委托来代表这个方法,代码的复用率不高。
	泛型委托:  public delegate bool Predicate<T>(Product obj);在该定义中,使用了泛型,可以应对上一定义中不能解决的问题。
	返回值也定义为委托:public delegate TResult GeneralMehtod<in T out TResult>(T arg);在这个定义中,干脆将返回值类型也作为泛型来定义,这样的话,返回值类型就不再局限于bool类型了。当然,这个时候方法名也改为了GeneralMethod更为合适。
	多个参数的委托:public delegate TResult GeneralMethod<in T,in T2...in T5>(T arg);由上一个委托类推,还可以批量定义委托。
	LINQ中的委托:Func<TResult>;在LINQ中,方法名不叫GeneralMethod ,而叫Func。
		    Func<T1,T2...T8,TResult>;在mscorlib.dll程序集中的System命名空间下定义了含有最多8个参数的委托。
		    Func<T9,T10...T16,TResult>;在System.Core.dll中的System命名空间下定义了含有最多16个参数的委托。

扩展方法C#3.0引入

	首先,扩展方法所在的类型要为静态类;其次,被扩展的类型要为方法列表的第一个参数的类型,并且前面要加上this关键字;还有关于代码风格第一个约定:扩展方法所在的类型以Extension作为结尾(这个就是约定优于配置)。

匿名方法 C#2.0引入

	匿名方法的语法很简单:使用delegate关键字进行声明,后面跟随方法的参数列表,花括号中编写方法体,ok了。

lambda表达式 C#3.0引入,可将其视为匿名方法的等价物,但是语法上更简洁。所有lambda表达式都使用Lambda 运算符=>,该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。Lambda 表达式x => x * x 读作“x goes to x times x”

	相比匿名方法,lambda表达式省略了delegate关键字,也省略了参数类型。“=>”右边是方法体,如果方法体超过一行,就需要加上花括号。

总结:

	LINQ的出现统一了操作各类数据源的接口,使得开发的难度和复杂度降低。还有很多细节没有在此说明,在接下来的博客中会使用一个实例来展示LINQ的重要内容。

分享到:
评论

相关推荐

    LINQ入门及应用 3/13

     1.4.1 初识LINQ to Objects  1.4.2 初识LINQ to ADO.NET  1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性  2.2.1 自动属性和属性访问器...

    LINQ入门及应用 11/13

     1.4.1 初识LINQ to Objects  1.4.2 初识LINQ to ADO.NET  1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性  2.2.1 自动属性和属性访问器...

    LINQ入门及应用 8/13

     1.4.1 初识LINQ to Objects  1.4.2 初识LINQ to ADO.NET  1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性  2.2.1 自动属性和属性访问器...

    LINQ入门及应用 1/13

     1.4.1 初识LINQ to Objects  1.4.2 初识LINQ to ADO.NET  1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性  2.2.1 自动属性和属性访问器...

    LINQ入门及应用 10/13

     1.4.1 初识LINQ to Objects  1.4.2 初识LINQ to ADO.NET  1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性  2.2.1 自动属性和属性访问器...

    LINQ(1):初识LINQ

    为什么需要LINQ?面向对象的编程语言已经成为企业应用开发的重要工具,ADO.NET对关系数据提供了一种方便的接口,但还不是一种面向对象的方法。例如,下面的伪代码:User u = new User(); //代表user表的一个...

    LINQ入门及应用 5/13

     1.4.1 初识LINQ to Objects  1.4.2 初识LINQ to ADO.NET  1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性  2.2.1 自动属性和属性访问器...

    LINQ入门及应用 7/13

     1.4.1 初识LINQ to Objects  1.4.2 初识LINQ to ADO.NET  1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性  2.2.1 自动属性和属性访问器...

    LINQ入门及应用 13/13

     1.4.1 初识LINQ to Objects  1.4.2 初识LINQ to ADO.NET  1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性  2.2.1 自动属性和属性访问器...

    LINQ入门及应用 2/13

     1.4.1 初识LINQ to Objects  1.4.2 初识LINQ to ADO.NET  1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性  2.2.1 自动属性和属性访问器...

    LINQ入门及应用 9/13

     1.4.1 初识LINQ to Objects  1.4.2 初识LINQ to ADO.NET  1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性  2.2.1 自动属性和属性访问器...

    LINQ入门及应用 4/13

     1.4.1 初识LINQ to Objects  1.4.2 初识LINQ to ADO.NET  1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性  2.2.1 自动属性和属性访问器...

    LINQ入门及应用 12/13

     1.4.1 初识LINQ to Objects  1.4.2 初识LINQ to ADO.NET  1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性  2.2.1 自动属性和属性访问器...

    LINQ入门及应用 6/13

     1.4.1 初识LINQ to Objects  1.4.2 初识LINQ to ADO.NET  1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性  2.2.1 自动属性和属性访问器...

    ASP.NET 4.5.1入门经典(in C# and VB) pdf原版[18MB]

    第12章 初识数据库 第13章 显示和更新数据 第14章 LINQ和ADO.NET 第15章 处理数据-- 高级主题 第16章 ASP.NET 4.5 Web站点中的安全性 第17章 个性化Web站点 第18章 异常处理、调试和跟踪 第19章 部署Web站点

    RxJava入门之介绍与基本运用

    初识RxJava 什么是Rx 很多教程在讲解RxJava的时候,上来就介绍了什么是RxJava。这里我先说一下什么是Rx,Rx就是ReactiveX,官方定义是:  Rx是一个函数库,让开发者可以利用可观察序列和LINQ风格查询操作符来编写...

    轻松学C#(图解版)

    第三篇是应用技术篇,主要介绍的是异常处理、文件和流、委托、事件、Lambda表达式、命名空间、预处理器、程序集、运行时类型标识、反射、特性、泛型、LINQ和数据库开发等。 =======================================...

    [Visual.Basic.2010.入门经典(第6版)].Thearon.Willi等.扫描版(1/2)

    第1 章 初识Visual Basic 2010 ............ 1 1.1 事件驱动编程 .............................. 2 1.2 安装Visual Basic 2010 ................ 3 1.3 Visual Basic 2010 集成开发 环境 ....................

Global site tag (gtag.js) - Google Analytics