亮网络解锁器,解锁网络数据的无限可能 了解详情
写点什么

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

  • 2007-04-26
  • 本文字数:1672 字

    阅读完需:约 5 分钟

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 是一种函数式编程语言)这样的很多语言当中,目前在.NET Java 当中讨论的比较多。

丰富的智能感知功能是指更加超前的智能感知引擎。工具提示和代码自动完成比以前的 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

2007-04-26 09:00625
用户头像

发布了 254 篇内容, 共 53.8 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

GLTF编辑器告诉你凹凸贴图的作用

3D建模设计

纹理处理 材质贴图

GLTF编辑器 解析什么是模型粗糙度

3D建模设计

纹理处理 材质贴图

区块链交易所开发 交易所开发源码

V\TG【ch3nguang】

NFT艺术品交易所系统开发 [定制部署,1周上线]

V\TG【ch3nguang】

Premiere Pro 2022 for Mac(pr2022)更新字幕转换包 v22.6.2激活版

mac

PR Premiere Pro 2022 苹果mac Windows软件 视频剪辑软件

拦截|篡改|伪造.NET类库中不限于public的类和方法

沙漠尽头的狼

个性化精准推送服务:Mobpush引领用户深度参与度的新纪元

MobTech袤博科技

大数据 智能推送

研发人员生产力到底能不能量化?这几种方法告诉你答案!

PingCode

绩效管理 研发生产力

NSDT 3D孪生场景搭建:阵列摆放详解

3D建模设计

数字孪生 3D场布

http代理要注意哪些风险?http代理ip和端口分别是什么?

巨量HTTP

http代理

C++ 的cout格式化输出

智趣匠

原型设计工具Axure RP 9 mac完美激活版 Axure RP下载地址

mac

Axure RP 9 苹果mac Windows软件 原型设计软件

数字化新语

数字化 信息技术 数字孪生

GLTF编辑器教你区分自发光贴图和光照贴图

3D建模设计

纹理处理 材质贴图

Golang不可不知的7个并发概念

俞凡

golang

2023 第十二届中国智能产业高峰论坛 - 文档大模型的未来展望

海拥(haiyong.site)

图像处理

4类缺陷管理工具比较

PingCode

团队协作 缺陷管理 bug管理

蓝易云:Nginx搭建文件下载服务器教程!

百度搜索:蓝易云

nginx Linux 云计算, 云服务器, #运维

永久激活版Premiere Pro 2023中文版 pr mac破解版 支持M2

晴雯哥

线性绘制在NSDT 3D场布中的应用

3D建模设计

数字孪生 3d建模 3D场布

ARTS打卡第6周

苏籍

数字货币交易所系统开发方案,币币合约交易所系统功能搭建

V\TG【ch3nguang】

16个值得推荐的源码共享网站盘点

PingCode

开源 软件开发

定制化精准推送与用户分组策略:数智营销的硬技能

MobTech袤博科技

大数据 智能推送

蓝易云:Linux系统定时清空日志内容和删除日志文件教程。

百度搜索:蓝易云

Linux cron 云计算, 云服务器, #运维

Orcas系列课程第二期:LINQ概览_.NET_Jonathan Allen_InfoQ精选文章