写点什么

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

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

关注

评论

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

面试官问:僵尸进程和孤儿进程有了解过吗

Java小咖秀

Linux 学习 面试 进程 经验

BFC "苦"前端久矣!

catcoolion

CSS 大前端

揭秘淘宝平台广告策略,拆解最佳投放实践

华为云开发者联盟

数据分析 广告 用户增长 淘宝 电商

MySQL的索引基础知识

guoguo 👻

求组队,PK华为HMS全球应用创新大赛!

InfoQ_e92167c73263

android

架构师训练营week08 作业

GunShotPanda

使用Spring Validation优雅地校验参数

Java课代表

springboot

轻量级BI应用-Superset实践

Jackchang234987

BI 数据产品

一次线上JVM Young GC调优,搞懂了这么多东西!

南方有乔木兮

信创舆情一线--50多家科技公司源代码泄露

统小信uos

知识点梳理:聊聊iOS SDK数据采集那点事儿

易观大数据

架构师训练营第8周学习总结

TH

判断两个链表是否合并

Acker飏

2行代码搞定一个定时器!

简爱W

Java中的模板设计模式,太实用了!

BUZHIDAO

Java

第八周总结

LEAF

JVM详解之:HotSpot VM中的Intrinsic methods

程序那些事

Java JVM GC

第8周回顾

慵秋

单向链表合并算法

走过路过飞过

该学一学了!零基础入门Docker

程序员的时光

Docker

Developer 转型记:一个开发平台的“魔力”

华为云开发者联盟

华为 AI 开发者 开发者工具 华为云

判了!中科大博士写游戏外挂赚了12万获刑,被抓才知道帮团队赚了300万……

程序员生活志

游戏开发 游戏 游戏外挂 新闻

要都练基本功

架构师

架构师训练营week08 学习总结

GunShotPanda

第八周总结

Acker飏

百万并发「零拷贝」技术系列之经典案例Netty

码农神说

Java Netty 零拷贝

Java SSM 框架常见面试题

老大哥

Java

【解构系统设计面试】什么是系统设计?以及如何设计一个新鲜事系统?

罗远航

系统设计

视频丨包不同的沙雕敏捷之砸锅卖铁买兰博

华为云开发者联盟

程序员 运维 敏捷 敏捷开发 技术人

架构师培训 -08总结 数据结构算法,网络通信协议,非阻塞网络 I/O,数据库原理

刘敏

一图看懂华为云DevCloud如何应对敏捷开发的测试挑战

华为云开发者联盟

微服务 敏捷开发 测试 云服务 华为云

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