LINQ的意义

Posted on 2009-01-05 14:10 A.Z 阅读(...) 评论(...) 编辑 收藏

很多时候我希望把事情简化,希望别人可以理解事情的实质,但是其实自己也越来越不得不接受这样一个一个事实,把复杂的事情简化灌输给简单思考的对象可能得不到期望的结果。把复杂的事情说的复杂,别人才不得不接受说描述的现实。

这篇文章是希望所有没有还是已经了解LINQ意义的战友再一次回顾和加深它在.NET发展史的地位。

.NET不是语言无关的事物,如果你说是,也许也说得通,但是本质上.NET引入自C#语言,并且在它自下参考微软多年经营的COM特性抽象的构建出一套公共类型,它的原型包括一个运行时和一套编译器,在经过理论实践和探索后,使得VB衍生出VB.net,使得J#变成微软的玩具,F#变成一个诱饵。在近几年各种脚本语言经过扩展都可以编译成.NET中间码。LINQ是什么?它是一套语法和关键词构成的语言子集。LINQ的原意是Language-Integrated Query也就是以语言形式的查询,它有别于一个字符串定义。这个区别在哪里?因为书写它需要经过编译器的检测。它有着静态特性。对程序员最有意义的是:它是约定在语言上的,清楚明了的一种集合查询范式,同时它会被IDE最大程度的支持,集成。

.NET离不开IDE,如果说你可以用记事本去书写abc.js或者cba.vbs那可能没有什么问题。但脱离了IDE,很难想象一个.NET工程会被顺利地写完。即使某些记忆力非常好,打字能力有别常人的程序员也很难去用命令行下断点调试一个大型程序的片段。即便这样的超人存在,同样它花了半天时间,一个初级程序员会节省出一半甚至更多的喝咖啡吃点心上开心的时间。语言的魅力在于它和IDE的关系最为的紧密。IDE对于LINQ多方面的支持是LINQ和其他查询范式变体最大的区别。如果Hibernate没有集成到Eclipse里面我不知道现在还有多少程序员会记得它。一个庞大的框架,一套复杂的配置,没有工具的情况下,学会看手册的牛人马上会成为大众英雄,这时只有少数人在机械的劳动着,项目的生产效率低下。

从.NET 3.5(VS2008)开始LINQ已经正式成为众语言的一部分,这时毋容置疑的事实。至今也有一部朋友还在写着.NET1.1的应用,桌面上还放着VS2003的图标,开始菜单还是XP的经典样式。他们暂时很满足于现况,但是我觉得他们需要理解LINQ的意义以及它的里程碑式的作用。从诞生的那一刻.NET就不是孤独的,它有着强大的竞争对手,纵观这几年它们进化的速度并不比这个号称踩在巨人肩膀上的牛犊慢,.NET的战略是一面同化竞争对手,一面渗透到各行各业,各台终端主机,最终到科学领域。LINQ加入到.NET的语言体系不是简单的提出一个标准,而是直接发起产品标志的攻击,如果你学会了LINQ这个标记就印在了你的身上。

LINQ的杀伤力和掌握它的人数多少有关。很多人不以为然。很多人一边使用着ASP.net一边大骂着M$,如果出现M$放弃.NET的那一天,它们或许又会去调转枪头骂IBM,又或许是SUN,不会是Oracle吧?我敬重.NET的价值,因为我敬重很多程序员为它的付出,因为我敬重自己写代码。大人在变成大人之前会有很多玩具,在变成大人之后可以保留这些玩具而回忆起童年是一件非常美好的事情。

上一篇我说道Linq to SQL会被废弃。下面我们一起看一下linq2sql在整个LINQ体系中的位置:

1. LINQ to Objects 这是LINQ立足的根本,它直接作用于对象。

2. LINQ to XML 这是LINQ对于XML查询的贡献,对于XML文档模型最直观就是XPATH,XQUERY查询,当LINQ出现时,基于XML复杂子对象的查询变的可能。

3. LINQ to ADO.NET

  3.1 LINQ to DataSet 这是对古老的ADO.net查询结果集模型的补充。

 3.2 LINQ to SQL 这里会被3.3逐步代替

 3.3 LINQ to Entities 数据库类型影射的实体模型,并且在这之上的LINQ查询。

LINQ to SQL对很多人还是新生事物,坦率的说作者本人也只是翻了几页技术材料,没有什么机会去深究。但是直觉告诉我它会以很简便的方式去操作数据库里的数据。尽管它会被废弃,但是它的尝试给后面的语言扩展提供了一个非常有价值的参考。谁又会知道它会不会被真正挖掘它的人用它的人抛弃呢?