LINQ学习之旅——再次拾起

  

  记得最早接触到LINQ技术是在风云的银光志silverlight3.0开发详解与最佳实践一书中。它也是我学习Silverlight技术最初的"导师"。因为其中主要是讲到Linq to Sql操作SQLSERVER数据库,那时自己觉得用SQL语句来操作数据库更习惯,也就没有系统地学习LINQ。最近一段时间,我看了博园里的有很多写关于LINQ专题的博文,比如:YJingLee的LINQ体验系列、LoveCherry的一步一步学Linq to sql系列以及Linq技术专题等,这些优秀的博文和专题网站都是我这段时间学习LINQ技术的宝贵资料。在浏览和阅读这些技术博文时,发现对LINQ技术的探讨在2008-2009年这段时间是最频繁的。其中对LINQ的褒贬评价甚至达到了激烈的争论状态。由此看出微软推出的LINQ技术在当时应该相当受关注。而我真正开始使用LINQ是在学习深蓝色右手的动画与游戏系列教程的时候,发现他是使用Linq To Xml技术来操作游戏配置文件。于是在这之后自己用silverlight技术开发小游戏时,也是模仿着使用LINQ技术来读取、修改xml文件。发现原来用Linq To Xml技术来操作xml文档是那么的简单方便。可能也是在那个时候对LINQ产生了兴趣,当然也想过要继续深入学习,但后来可能是在一门心思地学习Silverlight,就把它搁下了。今天我再次拾起它,以一个初学者的心态踏上这段学习之旅。

  在旅途开始之前,先要对LINQ有个初步的了解。LINQ是Language Integrated Query的缩写,即语言集成查询。它是一系列编程的接口,借助LINQ技术可以使用同一种方式查询各种不同类型的数据。它是微软在Visual Studio 2008和.Net Framework 3.5版本中的一项突破性的创新,它在对象领域和数据领域之间架起了座桥梁。我们在针对相关SQL语句查询数据库时,通常是包含在字符串里发送给数据库服务器来实现的,但这种方式不能有效的利用集成开发环境提供的编译时类型检查和IntelliSense的支持。而用LINQ操作数据库就完全可以用到这两个功能,也有助于开发者编写出更健壮、更安全的代码。但这只是LINQ在VS集成开发环境的下体现出来的优势。而LINQ的设计的目的则是在不同类型的数据之间,包括关系型数据或层次模型数据,提供统一的访问接口,而开发者无需关心底层数据访问的细节。其实在LINQ出现之前,也曾有过一些将不同类型的数据访问接口进行统一的解决方案,就像ODBC,可以使用统一的方式来访问Excel或关系型数据,但对于一些层次模型数据(xml)就无能为力了。那么LINQ所提供统一的数据访问接口主要表现在通过为不同的数据源开发相应的LINQ Provider。如下图LINQ设计模型结构图所示:

 图中可以发现LINQ可以被多种.NET语言所支持,还对Object、Xml、关系型数据库以及DataSet等不同数据源提供统一的访问接口。 

  从上图可知LINQ分为3类,Linq To Objects、Linq To Ado.Net以及Linq To Xml。而Linq To Ado.Net又包括Linq To Datasets(用Linq访问DataSet接口)、Linq To SQL(在类与数据库之间建立物理表的映射关系,通过操作自定义类型来实现对数据库物理表的操作)和Linq To Entities(和Linq To SQL相似,只不过它采用概念上的实体数据模型)。对于XML数据,LINQ也提供了统一的接口,它与.Net Framework高度集成,开发者可以像操作.Net集合对象那样来实现xml创建、查询以及修改等功能。XML作为现在各种平台的所支持的一种数据标准,对于它有着各种各样的规格和模型,如:XSD(定义XML文档结构)、XSLT(将XML文档在不同的结构间转换)、DOM(用来管理内存中的XML)和SOAP(使用XML来实现平台间的或操作性),但这些模型的语法对于操作XML的开发者来说并不轻松。下面的代码是使用了Linq To Xml来创建一个XML文档:

 1         //构造xml元素
2 XElement Sprites =new XElement(
3 "Sprites",
4 new XElement("Sprite01",
5 new XElement("Profession","法师"),
6 new XElement("Weapon","魔杖")),
7 new XElement("Sprite02",
8 new XElement("Profession","战士"),
9 new XElement("Weapon","屠龙刀")),
10 new XElement("Sprite03",
11 new XElement("Profession","道师"),
12 new XElement("Weapon","倚天剑")));
13
14 //保存成xml文件
15 Sprites.Save("Sprites.xml");

Sprites.xml文档:

只是简单的两句代码,就构造了一个xml文件,且从编写的代码中就能够很清楚的看出该xml文件的层次结构。        

 

      

                                                                                                                                                                                                                      

posted @ 2011-08-25 16:30  Rookie_J  阅读(2040)  评论(5编辑  收藏  举报