|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
您现在的位置: ChinaBeta.cn 中文IT资讯 >> 网盟学院 >> 编程类 >> 其它编程程序 >> 网管技术正文
推荐网管技术[多图]即将发布的Microsoft Of…推荐网管技术Asp生成静态网页
推荐网管技术让我穿过那道"墙"! 畅游网络应…推荐网管技术文件夹变身磁盘 查看共享有新招…
推荐网管技术防患于未然!终截者抗病毒软件…推荐网管技术主动防御!瑞星杀毒2008抢先评…
推荐网管技术玩转虚拟光驱:DAEMON TOOLS P…推荐网管技术速度超快 Discuz! 6.0.0试用手…
推荐网管技术当设计遇上PC:LG XPION A10图…推荐网管技术奇虎举证:各杀毒软件均报CNNIC…
推荐网管技术Google Earth 4.2加入繁体中文…推荐网管技术Photoshop CS3:蔚蓝梦幻风格婚…
推荐网管技术专业防护!瑞星防火墙2008测试…推荐网管技术挂载RAR文件 从认识到爱上WinM…
推荐网管技术让你冲浪随心所欲 如何访问被封…推荐网管技术轻装上阵!江民杀毒软件2008速…
推荐网管技术VMware Fusion苹果版全程图解(…推荐网管技术VMware Fusion苹果版全程图解(…
推荐网管技术从菜鸟出发!征服高清详细评测全…推荐网管技术VS2008和ASP.NET 3.5使用之初体…
推荐网管技术迅雷 快车 电驴 eMule下载飚速…推荐网管技术实战967种木马 木马清道夫2007…
推荐网管技术[多图]Ubuntu 7.04 初体验推荐网管技术东风吹战鼓擂 下载软件你选谁?
推荐网管技术若隐若现 Windows XP DirectX …推荐网管技术GPRS上网全攻略
推荐网管技术主流杀毒软件Vista兼容性横评推荐网管技术基于IRF的网络管理和业务管理解…
Visual Basic 9不完全入门之LINQ进阶
Www.ChinaBeta.Cn 更新时间:2008-5-6

【ChinaBeta.Cn 网盟学院】
本文转自博客园,文中内容不代表本站观点,仅提供参考。

  在上一篇随笔中,我透过简单的代码,向大家展现了 Visual Basic 9 中 Linq 激动人心的新特性。而这一篇随笔,则将以更复杂的示例,展示 Linq 的灵活性与扩展性,以至于探索 Linq 的工作原理与进阶应用。

  Linq 的不足

  .Net Framework 3.5 Beta 1 中,LINQ 的应用还存在一定限制,例如不支持 Group By,Having,以及 Join 语法。并且,它或多或少还存在一些 Bug,因此不建议用于需要高稳定性的环境中。当然,相信在最终发布版本中,它的能力将大大提高,毕竟这是 .Net Framework 3.5 中最重要的一项新增功能。

  关于匿名类型

  实际上,Visual Basic 9 & C# 3.0 中,都已经完成了对匿名类型的支持。例如:

  Visual Basic 9 匿名类型示例

Dim Person = New With {.Name = "John Chen", .Age = 13}
Console.WriteLine("Name:" & Person.Name)
Console.WriteLine("Age:" & Person.Age)

  这是为 Linq 而预备的一项极为有益的语法特性,虽然它也是编译时行为。当它应用在 Linq 中时,可以使用 Select 语句,隐式创建一组匿名类型对象。

  注意:Linq 中,Select 语句后置,这是为了 IDE 中智能感知的需要。

  匿名类型做了什么?

  Person 的匿名类型生成代码

Public Class _ClosureClass _Closure$__10
’ Methods
<DebuggerNonUserCode> _
Public Sub New()Sub New()
<DebuggerNonUserCode> _
Public Sub New()Sub New(ByVal other As _Closure$__10)

’ Fields
Public $VB$Local_Name As String
Public $VB$Local_Age As Integer
End Class

  实际上,它在编译时生成了一个 Closure 类型,封装这个看似动态的匿名类型。不过,Dynamic Interface(动态接口)已经被取消了。

  Linq 又做了什么?

  首先必须了解,Linq 实际上是一种编译时行为。编译器将 Linq 表达式转换为晦涩难懂的嵌套调用,以保持与 .Net 2.0 兼容。IQueryable 就应运而生,提供了大批查询函数,便于进行嵌套调用;扩展方法也得以大展身手,使 .Net 2.0 原有的集合类型支持 Linq 的语法特性。因此,不要担心 Linq 带来的兼容性问题。

  Linq 中的排序

  当然,您可以使用 IEnumerable(Of T) 中的 Orderby 函数,但是我非常不建议那么做。您可以使用完全像 T-SQL 一样的语法:

Dim Data As String() = {"a", "b", "d", "c"}
Dim Query = From O In Data Order By O Descending ’这就是核心
’输出信息
For Each QItem In Query
Console.WriteLine(QItem)
Next

  Linq 中的跨数组查询

  目前的 Visual Basic 9 Beta 1 中还不支持在查询语句中使用 Join, Union 等高级类 SQL 功能,因此只能用极端复杂的办法,就是直接调用 IEnumerable(Of T) 中的 Union,Order By 函数。但是,您还是可以通过一些变通手法,达到需要的功能。例如:

  Linq 中的跨数组查询示例

Dim CLRLanguage() As String = {"Visual Basic", "C#", "J#", "C++/CLI"}
Dim CLRCount() As KeyValuePair(Of String, Integer) = {New KeyValuePair(Of String, Integer)("Visual Basic", 1000000), _
New KeyValuePair(Of String, Integer)("C#", 1200000), _
New KeyValuePair(Of String, Integer)("J#", 300000), _
New KeyValuePair(Of String, Integer)("C++/CLI", 600000)}

Dim Query = (From O As String In CLRLanguage Order By (From Count In CLRCount Where Count.Key = O Select Count.Value))


  结语

  Linq 实质上仍然是编译时行为,这决定了它不可能作出过多的变化,然而它所代表的快速开发的势头,则是难以扭转的。毕竟,没有人希望再以晦涩难懂的语法写出晦涩难懂的程序,哪怕它在性能上有一定的提升。近来改版繁忙,加之课业繁重,写作速度不得不放慢,因此见谅。同时,希望您能关注 Visual Basic 团队,我们将尽力提供更好的技术随笔。
Google

(责任编辑:hahack)

发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
热门文章 相关报道
普通网管技术 [其它编程程序]Visual Basic 9不完全入门之LINQ… (05-06)最新网管技术
普通网管技术 [其它编程程序]Visual Basic中移动当前记录的方… (05-06)最新网管技术
普通网管技术 [其它编程程序]Visual Basic静态数组的定义方法 (05-06)最新网管技术
普通网管技术 [JSP|JAVA]Java开发者的十大戒律 (05-06)最新网管技术
普通网管技术 [JSP|JAVA]一个用JAVA写的测算服务器响应速… (05-06)最新网管技术
普通网管技术 [JSP|JAVA]Java学习:EJB的专用术语解释 (05-06)最新网管技术
普通网管技术 [JSP|JAVA]在Java编程中的“模式思想”与框… (05-06)最新网管技术
普通网管技术 [JSP|JAVA]Java开发工具Eclipse使用中报错的… (05-06)最新网管技术
普通网管技术 [JSP|JAVA]关于Java编程语言中的内部类说明 (05-06)最新网管技术
普通网管技术 [JSP|JAVA]J2EE架构的6个最佳实践 (05-06)最新网管技术
  • Visual Basic中移动当前记录…

  • Visual Basic静态数组的定义…

  • 使用VB将ASP代码封装生成DL…

  • --趣味程序源码注解--简单的…

  • 关于VB语言和怎样学习VB

  •   网友评论内容:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    I D *
    邮 箱
    主 页
    评 分 1分 2分 3分 4分 5分
    评 论

    关于我们  中国·国家信息产业部{粤ICP备06006652号}{陇ICP备06002562号}
    版权所有:『AK网盟基地』站长:Hahack | QQ:80505955 | E-mail:Hahack@Gmail.com
    Copyright (C) 2005-2007  akhack.org|chinabeta.cn All Rights Reserved