[C#3.0体验]Orcas中内置的LinQ,XLinQ[DLinQ]扩展方法

 谁都知道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"
 type ="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0,
 Culture=neutral, PublicKeyToken=b77a5c561934e089" />
4          
5                   <!-- <providerOption name="CompilerVersion" value="v3.5"/>
6              </compiler> -->
7           </ compilers >
8       </ system.codedom >

 

 

  由于时间和我写作的底限不长,所以我们先看看对.NET的对象和XML使用LinQ的扩展方法,至于数据库让我们在下一次中慢慢体会。我们首先新建一个类,由于能够给出更直观得效果我直接把图给剪辑过来。但是对于在博客上发表可不是一件很好的做法,代码如下: 

  在这里.NET3.0中类的简化就不多说了,我们可以不必写隐藏变量了,像上面就可以定义一个实体类了。我们可以用.NET 3.0新的类初始化器和集合初始化器对其进行初始化,代码如下:

  初始化时会给我们很爽的智能提示,所以写代码比DotNet2.0真的会少很多。

   然后我可以使用由System.Linq提供的标准的“Where()”扩展方法来获取这个集合中年龄为24的那些“Person”对象,代码如下: 


  LinQ扩展了很多方法,在智能提示中就可以看到,此代码运行后返回:

 

Name:小兵; NickName:网魂小兵;
Name:小宋; NickName:Sek;
Name:小孙; NickName:随风随云;


 下面是智能提示的界面: 

 


  我们还可以体会很多新鲜的功能,但是在这里就不再显示其他的例子,下面我们来看看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 >
14 

  对于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                                          });
10 

 

来源:http://www.cnblogs.com/xdotnet/archive/2007/04/12/oracas_getstarting_linqdlinqxlinq.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值