有没有像LINQ for Java这样的东西?[已关闭]

2022-09-01 16:21:58

开始用 C# 学习 LINQ。
特别是 LINQ to Objects 和 LINQ to XML。
我真的很喜欢 LINQ 的强大功能。

我了解到有一种叫做JLINQ的JavaScript实现。
此外(正如Catbert所发布的那样)Scala将拥有LINQ

你知道LINQ或类似的东西是否会成为Java 7的一部分吗?

更新:2008年的有趣帖子 - LINQ for Java工具


答案 1

看看Scala,它是一种功能强大的函数式编程语言,但类似于Java,可以在Java平台上运行。

在 Scala 中,可以使用与 LINQ 中基本相同的代码构造,尽管在 C# 或 VB 中没有特殊的查询推导式语法。

编辑:

以下是Scala查询功能的示例:

// Get all StackOverflow users with more than 20,000 reputation points.
val topUsers = for{
    u <- users
    if u.reputation > 20000
} yield u;

println ("Users with more than 20,000 reputation:")
for (u <- topUsers) {
    println u.name
}

答案 2

请务必注意,LINQ 有四件事:

  • 一元理解
  • 数据库集成
  • 类似 SQL 的语法
  • AST 操作

刚刚听说过它的人可能会认为它只是数据库集成。稍微研究过它的人可能会想到类似SQL的语法。那些真正深入挖掘的人会意识到它的一元理解方面,即使他们不知道它是什么。

例如,如果一个人以Scala为例,它具有没有其他三个的一元理解。有一个名为ScalaQuery的库,它通过monadic理解提供数据库集成(这样做的内在能力是monads很酷的主要原因)。另一个名为ScalaQL的项目,我认为,打算提供几乎相同的东西,但使用编译器插件来增强它。我不知道你提到的米格尔·加西亚(Miguel Garcia)的作品,但是,在看到他完成的其他事情之后,我对此感到非常兴奋。

然而,人们不需要特殊的语法来做一元理解。它只是使它被样板文件整洁。因此,它具有适当级别的泛型支持的语言可以立即使用它的这一方面。

Scala没有做两件事。第一种是类似 SQL 的语法。这无助于此:SQL语法在Scala中显得格格不入。我认为可以肯定地说,大多数Scala程序员更愿意坚持他们熟悉的东西 - 所谓的理解。

另一件事是我还没有讨论过的,AST操纵。这是操作已由编译器解析但尚未转换为字节码的代码的能力,从而允许在生成完成之前对其进行更改。

我认为这样的事情对Scala来说都是一个福音 -- 哎呀,对任何语言来说。但是,话又说回来,我有Forth程序员的背景,在编译代码时改变代码的能力是上帝赋予的权利。.Net 可以通过 LINQ 做到这一点,其他一些语言(如 Ruby)也可以。