System.Linq命名空间浅析

开发 后端
这里介绍System.Linq命名空间,其实整个命名空间都是一个扩展方法的库,它允许开发人员对任何数据类型进行查询。

Linq有很多值得学习的地方,这里我们主要介绍System.Linq命名空间,包括介绍用LinQ来检索数据等方面。

谁都知道LinQ是随Orcas(VisualStudio2007)的.NET发布的内置的一个扩展方法,其实整个命名空间都是一个扩展方法的库,它允许开发人员对任何数据类型进行查询。大家都认为这是数据查询的趋势,也许以后的SQL语言会慢慢的发展,但我想现如今大家最想看到的是LinQ带给我们的温暖和快乐。微软把这些扩展的方法放在System.Linq命名空间下,当我们创建一个新类型时,你会发现默认的命名空间中多了一个,在.NET2.0及以前的版本中都只有三个命名空间,现在多了个System.Linq命名空间。LinQ定义了标准的查询操作符扩展方法,可以为.NET开发人员用来轻松地查询XML,关系数据库,.NET 对象,和任何其他数据结构类型。Let’s go,下面让我们慢慢体会LinQ带给我们的快乐吧!(版本VSMar07CTP)

下面我们来看看LinQ分别对不同类型的数据进行查询,但由于VSMar07CTP有一个BUG,我们再看下面的例子时首先要去掉这个BUG。在我查看M$Connect时发现已经有人提交了这个BUG,就是web.config中编译通不过,其实去掉那个很简单,我们打开web.config找到<compiler>节点,把子节点注释掉,OK去掉了BUG后我们就可以正常的编译调试了,如下:

  1. <system.codedom> 
  2. <compilers> 
  3. <compiler language="c#;cs;csharp" extension=".cs" 
  4. type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0,  
  5. Culture=neutralPublicKeyToken=b77a5c561934e089"/> 
  6.  
  7. <!--<providerOption name="CompilerVersion" value="v3.5"/> 
  8. </compiler>--> 
  9. </compilers> 
  10. </system.codedom> 

我们还可以体会很多新鲜的功能,但是在这里就不再显示其他的例子,下面我们来看看LinQ扩展方法在XML中的应用。其实我们也可以把它们应用于数据库等数据检索,我们首先来定义一个XML文件,代码如下:

  1. <?xml version="1.0" encoding="utf-8" ?> 
  2. <people> 
  3. <person userID="1"> 
  4. <name>小兵</name> 
  5. <nickName>网魂小兵</nickName> 
  6. <age>24</age> 
  7. </person> 
  8. <person userID="2"> 
  9. <name>小赖</name> 
  10. <nickName>QQing</nickName> 
  11. <age>23</age> 
  12. </person> 
  13. </people> 

对于XML的数据检索有多种方法,在这里我们看看怎样用LinQ来检索数据,要用到这个功能当然要引入命名空间System.Xml.Linq(这也就是传说中的XLinQ,顺便提一下对于数据库的为DLinQ位于System.Data.Linq命名空间下)。[注:如果你找不到这两个空间可以到%Windows%\Microsoft.Net\Framework目录下的3.5里直接引用DLL类库。]

  1. XDocument people = XDocument.Load(Server.MapPath("People.xml"));  
  2. IEnumerable<XElement> person = people.Descendants("person")  
  3. .Where(p => p. Attribute ("userID").Value == "1"); 

以上代码它返回一个“XElement”元素序列,XElemen是没有类型的XML节点元素。我们可以通过LINQ的 Select() 扩展方法来构造数据形状,提供一个使用了新的对象初始化器句法的Lambda 表达式来填充同样的“Person”类:

  1. XDocument people = XDocument.Load(Server.MapPath("People.xml"));  
  2.  
  3. IEnumerable<Person> person = people.Descendants("person")  
  4. .Where(p => p.Attribute("userID").Value == "1")  
  5. .Select(p => new Person { UserID=Convert.ToInt32(p.Attribute("userID").Value),  
  6. Name=p.Element("name").Value,  
  7. NickName=p.Element("nickName").Value,  
  8. Age=Convert.ToInt32(p.Element("age").Value)  
  9. }  

由于我也是个初学者,今天的体验就到此了,***总要发表一下我的总体感受,LinQ带给我们的功能其实是没得说的,LinQ的强大允许一个可用于所有数据类型(数据库,XML文件,内存中的对象,以及web-services等)的共同的查询编程模型和语法;LinQ是可以组合的,允许开发人员轻松地往查询语法中添加新的方法/操作符,我们可以把我们自己扩展的方法应用其中;LinQ是可扩展的,允许与任何数据提供器类型一起使用,可以和现有的ORM引擎结合……但我觉得扩展方法在智能提示时会让我觉得很乱,当你不要用LinQ时为了让智能提示更清晰还是建议你去除System.Linq命名空间。其他的功能及效果等到后面继续,也就是说欲知后事如何且听下回分解!

【编辑推荐】

  1. LINQ匿名类型分析
  2. LINQ Where子句介绍
  3. LINQ使用Where扩展方法
  4. 介绍LINQ一些强大功能
  5. Linq使用Select浅谈
责任编辑:佚名 来源: 51CTO博客
相关推荐

2009-09-18 16:56:22

System.LINQ

2009-08-27 10:14:04

LINQ基础概念

2009-09-15 17:16:58

LINQ查询操作符

2009-08-28 13:56:25

C#反射命名空间

2009-08-21 13:34:32

C# System.I

2009-09-15 14:30:11

Linq连接

2009-09-17 13:30:32

LINQ to XML

2009-09-15 13:30:54

linq级联

2009-09-16 15:33:22

LINQ to XML

2009-09-07 16:44:28

Linq String

2009-09-16 17:11:35

LINQ To SQL

2009-09-10 18:02:23

LINQ to SQL

2009-09-14 16:46:15

LINQ to XML

2009-09-17 18:05:15

linq to sql

2009-09-14 18:23:59

LINQ嵌套查询

2009-09-14 09:46:00

LINQ to SQL

2009-09-15 10:12:37

LINQ To SQL

2009-09-15 09:19:22

linq动态条件

2009-09-14 13:37:25

LINQ ADO.NE

2009-09-17 10:57:06

Linq随机读取数据
点赞
收藏

51CTO技术栈公众号