Jon*_*eet 63
LINQ for Java会很可爱,但问题在于语言集成.
Java没有像lambda表达式那样简洁,它们是LINQ的基石之一.我想他们可以在没有lambda表达式的情况下将查询表达式支持层叠在普通Java之上,通过使扩展创建匿名内部类 - 但它会非常可怕.如果你想做LINQ to SQL这样的事情,你还需要表达式树.
检查的异常可能会妨碍,但我们必须看到.IQueryable的等价物需要具有某种常规检查异常 - 或者可能在元素类型和异常类型中都是通用的......
无论如何,这都是天上掉馅饼 - 考虑到Java社区关闭的麻烦,我认为在2012年之前预期像Java中的LINQ这样的东西是愚蠢的.当然,这并不是说用"类似Java"的语言是不可能的.例如,Groovy已经有了一些有用的方面.
对于库方面,Hibernate已经提供了LINQ to SQL的许多功能的"非集成"版本.对于LINQ to Objects,您应该查看Google Java Collections API - 它有很多相同的东西(过滤,投影等).当然,如果没有lambdas,它的使用时间会非常繁琐 - 但它仍然非常,非常方便.(我在工作中一直使用Google Collections代码,我不想再回到"vanilla"Java集合.)
Ste*_*hen 14
值得注意的是,Scala 2.8将获得LINQ支持 ......
实际上,scala标准集合提供的API在某种意义上就像LINQ-for-Objects一样工作.这是一个例子:
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").
Run Code Online (Sandbox Code Playgroud)
不要害怕新的line-dot语法:你可以用简单的旧式编写代码:
Array(1,2,3,4,5,6).map(x => x*x)
Run Code Online (Sandbox Code Playgroud)
并且有许多项目提供接近LINQ-to-SQL语法.例如,从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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20787 次 |
| 最近记录: |