.NET人字拖
万丈高楼平地起,我正在努力筑地基...
随笔- 133  文章- 0  评论- 606 
博客园  社区  首页  新随笔  联系  管理  订阅 订阅

[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>
9 

 

 

  由于时间和我写作的底限不长,所以我们先看看对.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");
4 

  以上代码它返回一个“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 

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

 


 

关于作者:网魂小兵

文章出处:http://xdotnet.cnblogs.com

本文可以随意转载,摘抄等非商业用途。

为了尊重作者成果,在转载和摘抄的时候请留下作者名称和出处。

绿色通道:好文要顶关注我收藏该文与我联系
posted @ 2007-04-12 23:30 网魂小兵 阅读(3441) 评论(23) 编辑 收藏
718075
#1楼[楼主]网魂小兵       在2007-04-12 23:38说:
由于图片撑开,郁闷阿,不管了,大家就委屈点,将就着看吧!
 回复 引用 查看   
#2楼watson hua       在2007-04-13 00:06说:
代dudu劳,
这种文章不适合放在首页上。

 回复 引用 查看   
#3楼兰亭       在2007-04-13 07:44说:
这种文章为什么不能放在首页上??
 回复 引用 查看   
#4楼江城子       在2007-04-13 08:31说:
不错,浅显易懂,VS.net 2007真漂亮,楼主是在Vista环境下安装的吧?自动提示的边框也是玻璃效果么?什么时候出正式版啊?
 回复 引用 查看   
#5楼Jason Cui       在2007-04-13 08:49说:
不错不错,简明易懂。
不过首页是用来放高级技术的,这个放到新手区的首页可能比较好一点。

 回复 引用 查看   
#6楼[楼主]网魂小兵       在2007-04-13 09:26说:
@watson hua

@Jason Cui

谢谢你的提醒,我不知道这个标准是什么?我只觉得让更多人享受一下新的界面,我想有很多人还是很喜欢的,也有很多人加我的MSN/QQ想讨论Oracas以及其他的技术问题。

如果dudu觉得不可以放在首页那就直接丢到其他地方吧!

如果觉得本文对你来说太俗,可以略过此文,相信博客园上还是有很多东西可以欣赏的!

 回复 引用 查看   
#7楼补丁       在2007-04-13 09:27说:
新东西放首页也未尝不可
 回复 引用 查看   
#8楼[楼主]网魂小兵       在2007-04-13 09:34说:
@江城子

Vista的效果当然不错了,就是我觉得有的太花了!
如果Windows Server 2007出来了,我肯定换!

 回复 引用 查看   
#9楼iCaca       在2007-04-13 09:37说:
hoho...期待2007...
 回复 引用 查看   
#10楼Apple[未注册用户] 在2007-04-13 09:37说:
为什么要取名字叫LinQ
 回复 引用   
#11楼[楼主]网魂小兵       在2007-04-13 09:39说:
@兰亭
@补丁

我只是想让更多的还没用过这个东东的人了解了解,至于对这些已经很熟悉的人来说当然是很粗俗的了!

 回复 引用 查看   
#12楼[楼主]网魂小兵       在2007-04-13 09:52说:
@Apple

Language-Integrated Query的缩写,XLinq就是加上XML,DLinq就是加上Database吧,不知道有没有错!

 回复 引用 查看   
#13楼sky[未注册用户] 在2007-04-13 10:16说:
lz你到底明白不明白啊?这是.net3.5的东西,不是.net3.0,.net3.0内部还是clr2.0,c#2.0,只有.net3.5才是使用的clr3.0,c#3.0的,拜托lz好好研究研究吧,不要一直挂着.net3.0的名号了!!
 回复 引用   
#14楼Boler Guo       在2007-04-13 10:43说:
同意楼上,楼主请写C# 3.0 或者 .Net Framework 3.5
 回复 引用 查看   
#15楼[楼主]网魂小兵       在2007-04-13 11:28说:
@sky
@Boler Guo

你们说的米有错,我也是个初学者,多多包含,已经改正了!

 回复 引用 查看   
#16楼随风流月       在2007-04-13 14:39说:
Microsoft Visual Studio Codename "Orcas"
不是 Oracas :-)。

 回复 引用 查看   
#17楼漂泊雪狼       在2007-04-13 16:41说:
都07了啊
 回复 引用 查看   
#18楼木野狐       在2007-04-13 18:59说:
Orcas 在哪里下载呢?
 回复 引用 查看   
#19楼[楼主]网魂小兵       在2007-04-13 22:14说:
@随风流月

呵呵,真的啊,我没有注意这个,一直以为是Oracas,谢谢指证!

 回复 引用 查看   
#20楼A.Z[未注册用户] 在2007-04-14 10:43说:
@网魂小兵
你有Server强迫症:P

 回复 引用   
#21楼xiaowy 在2007-04-17 19:44说:
为什么我装的vs2007从微软官方网上下的。
对linq没有智能提示呢?
对where关键字还提示 System.Array' does not contain a definition

 回复 引用   
#22楼小兵[未注册用户] 在2007-04-18 12:44说:
@xiaowy

你没有选择.NET 3.5吧,或是没有引用System.Linq这个类库!

 回复 引用   
注册用户登录后才能发表评论,请 登录 或 注册,返回博客园首页。
首页博问闪存新闻园子招聘知识库
最新IT新闻:
· 最想要的Entity Framework功能
· 专访Jeffrey Richter:Windows 8是微软的重中之重
· 《福布斯》:谷歌进军硬件产品 难撼动苹果地位
· 美国空军拟最多购买1.8万台iPad 2
· 分析称专利之争让谷歌苹果两败俱伤
» 更多新闻...
最新知识库文章:
· 高级编程语言的发展历程
· 如何学习一门新的编程语言?
· 学习不同编程语言的重要性
· 为什么我喜欢富于表达性的编程语言
· 计算机专业的女生为什么要学编程
» 更多知识库文章...

China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
Copyright ©2012 网魂小兵
Name:
网魂小兵
Addr:
福建厦门
MSN:
myxbing#hotmail.com
昵称:网魂小兵
园龄:5年11个月
粉丝:23
关注:0

搜索

 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论
  • 我的标签
  • 更多链接

我的标签

  • directx11(6)
  • direct3d 11(6)
  • 游戏编程(6)
  • c/c++(6)
  • vs2010(5)
  • wpf(4)
  • openssl(2)
  • direct3d坐标系(2)
  • vs2008(2)
  • xaml(2)
  • 更多

随笔分类(170)

  • AJAX(doc)(8)
  • ASP.NET(46)
  • C#3.0+(13)
  • C/C++(27)
  • CommunityServer(7)
  • Database(11)
  • Enterprise Library (7)
  • JavaScript(10)
  • ServerContols(7)
  • UML(1)
  • VC++/MFC(8)
  • WPF/SilverLight(6)
  • XNA Game(2)
  • 翻译(4)
  • 今天我当家(11)
  • 设计模式(2)

随笔档案(133)

  • 2012年2月 (3)
  • 2011年8月 (3)
  • 2011年7月 (7)
  • 2011年5月 (1)
  • 2011年4月 (2)
  • 2011年2月 (1)
  • 2010年1月 (1)
  • 2009年3月 (3)
  • 2009年1月 (8)
  • 2008年3月 (1)
  • 2008年2月 (3)
  • 2008年1月 (1)
  • 2007年11月 (4)
  • 2007年10月 (3)
  • 2007年9月 (9)
  • 2007年8月 (3)
  • 2007年7月 (2)
  • 2007年6月 (9)
  • 2007年5月 (9)
  • 2007年4月 (14)
  • 2007年3月 (6)
  • 2007年2月 (3)
  • 2007年1月 (15)
  • 2006年12月 (9)
  • 2006年11月 (2)
  • 2006年10月 (4)
  • 2006年9月 (7)

文章分类

  • Asp.Net(.NET)

I Like Links

  • ASP.NET
  • Codeplex
  • XNADevelopment

My Friend's Blog

  • 陆巍杰
  • 孙小雨
  • 探丫头
  • 网络安全&Linux

积分与排名

  • 积分 - 283912
  • 排名 - 248

最新评论

阅读排行榜

评论排行榜