Scala 中的 LINQ 类似物?

标签 linq scala

对于 Scala 来说,是否存在任何与 LINQ (.NET) 类似的合理的东西?

最佳答案

这取决于“LINQ”的确切含义。 LINQ 涉及很多事情。

最明显的答案是:只需使用 Scala 的 .NET 端口。它使您可以完全 native 访问 .NET 中的所有内容,其中显然包括 LINQ。

不幸的是,Scala 的 .NET 端口几年前就被放弃了。幸运的是,它在几个月前再次获得了微软的直接资助。您预计会在 2011/2012 年的某个时间发布该版本。

无论如何,什么是 LINQ?

在 .NET 中添加了一些功能,特别是针对 LINQ 的 C# 和 VB.NET。从技术上讲,它们不是 LINQ 的一部分,但却是必要的先决条件:类型推断、匿名(结构)类型、lambda 表达式、函数类型( Func<T...>Action<T...> )和表达式树。所有这些都已经在 Scala 中存在了很长时间,其中大多数已经永远存在了。

也不是 LINQ 的直接一部分,但在 C# 中,LINQ 查询表达式可用于生成 XML,以模拟 VB.NET 的 XML 文本。 Scala 具有 XML 文字,如 VB.NET。

更具体地说,LINQ 是

  • 一组标准查询运算符的规范
  • 这些运算符的一组实现(即 IQueryable、LINQ-to-XML、LINQ-to-SQL、LINQ-to-Objects)
  • 用于 LINQ 查询理解的内置嵌入式语法
  • 一个单子(monad)

在 Scala 中,与几乎所有其他函数式语言一样(实际上也几乎所有其他面向对象语言),查询运算符只是标准集合 API 的一部分。在 .NET 中,它们的名称有点奇怪,而在 Scala 中,它们的标准名称与其他语言中的标准名称相同: Selectmap , Aggregatereduce (或fold),SelectManyflatMap , WherefilterwithFilter , orderBysortsortBysortWith ,有zip , taketakeWhile等等。因此,这既考虑了规范又考虑了 LINQ-to-Objects 实现。 Scala 的 XML 库还实现了集合 API,它负责 LINQ-to-XML。

Scala 中没有内置 SQL API,但有第三方 API 实现了集合 API。

Scala 也有针对这些 API 的专门语法,但与 Haskell 不同,Haskell 试图使它们看起来像命令式 C block ,而 C# 则试图使它们看起来像 SQL 查询,Scala 试图使它们看起来像 for循环。他们被称为 for推导式 相当于 C# 的查询推导式和 Haskell 的 monad 推导式。 (它们还取代了 C# 的 foreach 和生成器 ( yield return ))。

但是,如果您确实想知道 Scala 中是否有 LINQ 的类似物,您首先必须明确“LINQ”的确切含义。 (当然,如果你想知道他们是否“理智”,你也必须对其进行定义。)

关于Scala 中的 LINQ 类似物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3785413/

相关文章:

c# - 分块加载表

c# - 我可以通过 bool 条件将 IEnumerable 拆分为两个而不需要两个查询吗?

c# - 这两种说法有什么区别?

c# - 如何使用 LINQ 比较日期和日期时间?

java - 如何在单个 Netbeans 项目中混合使用基于 JVM 的语言?

scala - Spark将列转换为存储在字符串中的sql类型

python - Spark 和 PySpark 之间是否存在功能对等

c# - 创建 Linq XML 文档时为 "Non white space characters cannot be added to content"

scala - 多个目标的 Sbt 程序集

scala - 如何转换 "pimp"方法来接受元组?