BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Orcas系列课程第二期:LINQ概览

| 作者 Jonathan Allen 关注 529 他的粉丝 ,译者 朱永光 关注 0 他的粉丝 发布于 2007年4月27日. 估计阅读时间: 6 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!
Kit George演示了Orcas在线Webcast系列课程的第二期。
 
Kit George指出的第一件事就是API设计者能写出他们自己的LINQ数据提供程序(Provider),以供开发人员像使用内置数据提供程序那样以同样的方式来使用LINQ和操作数据。虽然创建自定义的LINQ数据提供程序不是那么轻而易举,但微软似乎很愿意为大家提供一些建议和帮助。
 
如下列出的一些支持LINQ的新特性让人激动不已。因为它们中的很多特性已经被期盼了很多年了,还有些特性很多人都无法想象会被引入到VB和C#当中。在这个课程中给出的这些特性如下:
  • 查询表达式(Query Expressions)
  • XML文本(XML Literals)(译者注:一种在代码中直接书写XML片段的特性)
  • XML元素访问(XML Element Access)
  • 可空类型(Nullable Type)
  • 对象初始化器(Object Initializer)
  • 本地类型推断(Local Type Inference)
  • Lambda表达式(Lambda Expression)
  • 丰富的智能感知(Rich Intellisense)
  • 扩展方法(Extension Method)
  • 表达式树(Expression Tree)
  • 匿名类型(Anonymous Type)
  • 三重操作符(Ternary Operator)
  • 联合操作符(Coalesce Operator)
  • 分离方法(Partial Methods)

课程中简要介绍了类型推断(Type inference)。类型推断已经存在于如Haskell(译者注:Haskell是一种函数式编程语言)这样的很多语言当中,目前在.NETJava当中讨论的比较多。

丰富的智能感知功能是指更加超前的智能感知引擎。工具提示和代码自动完成比以前的Visual Studio版本能更早地被触发,并提供更多辅助信息。
 
在VB中书写LINQ查询语句是需要行连续符的。由于典型的LINQ查询语句的长度都不短,所以VB开发人员希望得到更好的智能感知引擎。
 
在LINQ查询语句中,Select语句是可选的。如果使用了Select语句,那么必须出现在From语句之后。这一点,需要被智能感知首要支持。如果Select包含的字段不止一个,那么一个包含了对应属性的匿名类型就会被创建。相应地,通过在字段中传递一个构造器或者对象初始化器,普通的对象也同样能被创建。
 
在VB中对象初始化器的语法稍显笨重,因为它要求运用With关键字。
 
其他被熟知的SQL关键字,如Distinct也被支持。SQL中的“Top n”语句通过Take和Skip等扩展方法来获得。
 
不像SQL,LINQ依赖于类型的早期绑定。这意味着当绑定到非特定类型的集合上的时候,开发人员可能不得不设定集合中包含的具体类型。例如:“From con As Control In Me.Controls”。
 
扩展方法被大量的使用,并能应用到类和接口上。针对IEnumerable的扩展方法涉及到了很多常见的场景。另外,你能使用LINQ语法做的任何事情同样都能使用扩展方法来完成,即允许查询的动态构建。
 
但这个Beta版本依然缺少了一些特性,包括非空类型、Join、Grouping和Lambda表达式等,这些特性有望出现在Beta2中。LINQ数据提供程序允许为Grouping创建自己的聚合函数。
 
如果你想通过查询得到一个单一的值,即通常所说的Max或Average值,那么语法会轻微的改变为“Dim value = Aggregate item In Collection Into Max(item)”这样的形式。
 
查询使用了延迟执行的方式。在查询中的数据被实际使用之前,查询都不会被处理。一个查询甚至能被写成针对另外一个查询进行操作,在这里,第二个查询的结果被实际使用到之前第一个查询不会被执行,例如在一个“For Each”这样的循环结构中。
 
LINQ to SQL”支持SQL Server,但不支持其他的数据库,如Oracle 10。数据库厂商需要自己创建LINQ数据提供程序,让自己的数据库可以通过LINQ的方式访问。

Orcas Beta 2有望在7月和9月之间发布。

查看英文原文:Live From Redmond Coverage: LINQ Overview
译者简介:朱永光,IT自由人和环境保护者,微软最有价值专家(MVP)和MCSD。他有14年的编程实践经历,5年软件构架和开发管理经验,擅长微软相关技术和产品,目前主要关注软件构架和开发框架,是成都.NET俱乐部副主席和核心讲师,个人博客为http://redmoon.cnblogs.com。现在他作为共同创始人经营着一家环境保护技术公司。为InfoQ中文站贡献内容,请邮件至china-editorial@infoq.com

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT