LINQ for F#

  • Jonathan Allen
  • 李永伦

2012 年 3 月 18 日

话题:语言 & 开发

F# 3.0 包含在 Visual Studio 11 beta 里,支持使用 LINQ 表达式。

F# 总是可以访问底层的库,这使得 LINQ 成为可能,但F# 3却是第一个在语法上提供实际支持的版本。就像 Visual Basic,F# 的 LINQ直接在查询里支持聚合函数,如 count、sum、first 和 last。此外,F# 也和 VB 一样不需要末尾的“select”子句。所有查询都要放在以“query {”开始,并以匹配的“}”结束的表达式里。

LINQ 或语言集成查询是一种类似 SQL 的语法,最初是为 Cω这个实验语言开发的,最终却在 Visual Basic 和 C# 里发布。虽然很独特,但概念上却类似于 80 年代和 90 年代的语言,如dBasePowerBuilder

另一个在 F# 3 里发布的特性是类型提供程序。这个话题相对复杂,涉及到的东西可以看做代码生成和动态类型之外的另一种选择。若想了解更多,我们建议你看看Joe Pamer 关于类型提供程序的视频演讲F# 自带以下类型提供程序

  • OData 服务
  • 数据库链接,如 SQL
  • 数据库架构,如 LINQ to SQL 的 dbml 文件
  • 实体数据模型格式(即 EDMX 架构文件)
  • Web Service 的 WSDL 文档
  • 以.resx 为扩展名的资源文件

类型提供程序的一个有趣特性是它们可以在设计时为 Visual Studio 的智能感知提供数据。这意味着会有一些时候代码完成的提示显示为“加载中”,而不是实际的属性和方法。这个延迟取决于每个类型提供程序以及远程服务器的响应速度。

F# 还将支持可移植库。可移植库是无需单独重新编译就可以在.NET、Silverlight、Windows Phone 和 XNA 上共享的 DLL。

最后,F# 3 通过“member val”关键字提供自动实现属性。属性需要在声明的时候进行初始化,可变属性需要添加“with get, set”后缀。

查看英文原文:LINQ for F#

语言 & 开发