速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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:00726
用户头像

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

关注

评论

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

字节跳动 Spark Shuffle 大规模云原生化演进实践

字节跳动云原生计算

大数据 spark 云原生

Lazada商品评论列表API:电商行业的实时反馈宝库

Noah

全方位的账号安全管理

尚思卓越

黑客 网络安全

倒计时2天|2023开放原子开发者大会15个技术平行专场议程速览

开放原子开源基金会

开源

铸就安全可信的数字化「信息枢纽」—华为云ROMA Connect荣膺软件产品可信【卓越级】认证

华为云PaaS服务小智

云计算 华为云

测试开发 | 智能系统在航空航天领域的应用与创新

测吧(北京)科技有限公司

测试

轻应用市场兵分小程序快应用两路,熟好熟坏?

Onegun

小程序 小程序容器 轻应用 快应用

3D模型如何制作透明玻璃材质

3D建模设计

3D渲染 材质纹理贴图 3D材质编辑

火山引擎ByteHouse基于云原生架构的实时导入探索与实践

字节跳动数据平台

数据库 大数据 云原生

测试开发 | AI在交通运输中的引领作用:智能交通系统与城市流动

测吧(北京)科技有限公司

测试

AGI时代的奠基石:Agent+算力+大模型是构建AI未来的三驾马车吗?

GPU算力

【第七在线】季节性商品计划:如何应对时尚行业的快速变化

第七在线

苏宁易购商品详情API:电商实时数据

Noah

软件测试/测试开发丨Python元组

测试人

Python 软件测试

长三角安防行业盛会“2024杭州国际安防产品展览会”

AIOTE智博会

安防展 杭州安防展 安防产品展

【第七在线】供应链协作与商品计划:建立强大的合作关系

第七在线

测试开发 | 语音助手技术:Siri、Alexa、Google Assistant的背后

测吧(北京)科技有限公司

测试

openEuler汇聚开源力量,共建全球开源生态

彭飞

Cloudeye对接Prometheus实现华为云全方位监控

华为云开发者联盟

云计算 华为云 华为云开发者联盟 华为云弹性云服务器

先进制造身份治理现状洞察:从手动运维迈向自动化身份治理时代

Authing

制造业 先进制造 国产化替代 身份自动化

测试开发 | 人工智能引领交通运输革命

测吧(北京)科技有限公司

测试

诚邀报名|探索汽车智能化的开源未来

开放原子开源基金会

开源

GLTF模型为什么越来越流行?

3D建模设计

3D渲染 材质纹理贴图

测试开发 | 智能系统在能源管理中的优化

测吧(北京)科技有限公司

测试

测试开发 | 语言助手技术的发展历程

测吧(北京)科技有限公司

测试

GLTF vs FBX:应该使用哪种格式?

3D建模设计

3D渲染 材质纹理贴图

写给测试同学的福利 | 招募

优测云服务平台

测试 体验官 测试体验官

Sync Folders Pro for Mac(文件夹数据同步工具) v4.6.9永久激活版

mac

苹果mac Windows软件 Sync Folders Pro 文件夹同步工具

3D材质编辑器

3D建模设计

3D渲染 材质纹理贴图 3D材质编辑

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