atitit. groupby linq的实现(1)-----linq框架选型java .net php
实现方式有如下
做报表统计啊,有个大问题。。有人整过集合的groupby查询汇总(Sum)没有哟??已经使用了linq4j,quaere,josql,,ms对Map字典不起作用。。
1. Dsl/ Java8 Streams AP ,对象化的查询api ,推荐
persons1.GroupBy(a => a.Name).Select(g => (new { name = g.Key, count
优点是。。类型安全的查询,并且能使用智能提示功能!
2. Linq::: like sql 的dsl
1.1. linq4j (jdk6 ok,jdk7 编译错误,又马jar下载)
linq4j d fun0 ,fun1 ,fun2 也不是好的dsl..
作者::老哇的爪子Attilax艾龙,EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
1.2. Quaere:Java上的LINQ(新不上sourcecode)
下例从一个从产品列表中得到产品名称的列表:
List products = Arrays.asList(Product.getAllProducts());
Iterable productNames =
from("p").in(products).
select("p.getProductName()");
1.3.joSQL也是与Quaere类似的API
这个到是有jar下载了...好像不支持list(map),only list(bean)
Caused by:java.lang.IllegalArgumentException: Cannot find method with name: url in class: java.util.Map
1.4. 。net linq
语句描述:Linq使用Group By和Count得到每个CategoryID中产品的数量。
说明:先按CategoryID归类,取出CategoryID值和各个分类产品的数量。
1.计数
1 var q =
2from p in db.Products
3 group p by p.CategoryID into g
4 select new {
5 g.Key,
6NumProducts = g.Count()
7 };
3. Sql 解析
缺点是不能使用使用ide智能提示
4. Lambda
5. 嘎自实现
1.5. linq4j code
Linq4j.asEnumerable(emps)
.groupBy(
EMP_DEPTNO_SELECTOR,newFunction0() {
publicStringapply() {
returnnull;
}
},newFunction2() {
publicStringapply(Stringv1,Employeee0) {
returnv1==null?e0.name:(v1+"+"+e0.name);
}
},newFunction2() {
publicStringapply(Integerv1,Stringv2) {
returnv1+": "+v2;
}
})
.orderBy(Functions.identitySelector())
.toList()
.toString();
6. apache collections4 (不行,马行上groupby)
7. 林吧:::自己DSL来自stream api jdk8 相像
8. Stream api n linq的不同
Stream 是基于lambda的dsl ,语法不跟个sql雅十...这个更灵活...
Linq,雅十dsl,走十语法跟个sql雅十..linq更容易的...
9. 参考
如何将常见的LINQ表达式转换为Java 8 Streams API表达式.
Linq使用Group By经验总结- 51CTO.COM.htm
Java8如何进行stream,reduce,collection操作- 51CTO.COM.htm