会是一个有用的工具吗?我一直在开发一个工具,它允许Java对象映射到数据库中的一行。
发布于 2008-12-06 20:31:27
LINQ很不错,但问题是语言集成。
Java没有任何像lambda表达式那样简洁的表达式,它们是LINQ的基石之一。我想他们可以在没有lambda表达式的普通Java之上添加查询表达式支持,方法是通过扩展创建匿名内部类--但这是非常可怕的。如果要执行类似LINQ的操作,还需要表达式树。
检查过的异常可能会妨碍我们,但我们得看看。等效的IQueryable需要有某种普通的检查异常--或者可能在元素类型和异常类型中都是通用的.
无论如何,考虑到Java社区在闭包方面遇到的麻烦,这一切都是空中楼阁,我认为早在2012年之前就指望Java中的LINQ这样的东西是愚蠢的。当然,这并不是说它在“类似Java”的语言中是不可能的。例如,Groovy已经有了一些有用的方面。
对于库端,Hibernate已经提供了LINQ许多特性的“非集成”版本。对于LINQ,您应该查看Google集合API --它有很多相同的东西(过滤、投影等)。当然,如果没有lambdas的话,使用起来要费时得多--但它仍然非常非常方便。(我在工作中一直使用Google集合代码,我不想回到“普通”Java集合。)
发布于 2009-11-11 07:32:03
值得注意的是Scala2.8将支持LINQ..。
实际上,standart集合在某种意义上提供了类似于LINQ的API。下面是一个例子:
List("Paris","Berlin","London","Tokyo")
.filter(c => c.endsWith("n"))
.map(c => c.length)
// result would be length of the words that ends
// with "n" letter ("Berlin" and "London").不要害怕新的行点语法:您可以用简单的旧样式编写代码:
Array(1,2,3,4,5,6).map(x => x*x)还有许多项目提供了接近LINQ语法的功能.例如,从Squeryll获取的片段:
import Library._
using(session) {
books.insert(new Author(1, "Michel","Folco"))
val a = from(authors)(a=> where(a.lastName === "Folco") select(a))
}
// but note that there is more code behind this example发布于 2010-01-11 18:54:55
对于解决此问题的更一般方法,请考虑使用奎尔兹尔。
它提供了LINQ风格的语法,支持JPA/Hibernate、JDO、SQL和后端。
我是Querydsl的维护者,所以这个答案是有偏见的。
https://stackoverflow.com/questions/346721
复制相似问题