NHibernate 对分组聚合支持的不好

简介:

Hibernate 对分组聚合支持的不好,例如下面的代码:

1
2
3
4
5
6
7
var  query = from  raqi in  session.Query<factstatraqi>()
    group  raqi by  raqi.SpaceKey
    into  g
    select  new  {
       g.Key,
       Count = g.Count(r => r.Raqi > 1)
    };</factstatraqi>

这样的查寻生成的Sql如下,很明显是错误的,

1
2
3
4
5
6
7
select
     factstatra0_.[SpaceKey] as  col_0_0_,
     cast ( count (*) as  INT ) as  col_1_0_
from
     [dbo].[FactStatRaqi] factstatra0_
group  by
     factstatra0_.[SpaceKey]

LinqToSql可以生成正确的sql

1
2
3
4
5
6
7
8
9
10
11
12
13
-- Region Parameters
DECLARE  @p0 Float  SET  @p0 = 1
-- EndRegion
SELECT  [t1].[SpaceKey] AS  [ Key ], (
     SELECT  COUNT (*)
     FROM  [FactStatRaqi] AS  [t2]
     WHERE  ([t2].[RAQI] > @p0) AND  ([t1].[SpaceKey] = [t2].[SpaceKey])
     ) AS  [ Count ]
FROM  (
     SELECT  [t0].[SpaceKey]
     FROM  [FactStatRaqi] AS  [t0]
     GROUP  BY  [t0].[SpaceKey]
     ) AS  [t1]

看来,NH的Linq查寻还有很长的路要走。

张志敏所有文章遵循创作共用版权协议,要求署名、非商业 、保持一致。在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。

本博客已经迁移到 GitHub , 围观地址: http://beginor.github.io/

本文转自张志敏博客园博客,原文链接:http://www.cnblogs.com/beginor/archive/2011/03/16/1985956.html ,如需转载请自行联系原作者
相关文章
|
11月前
|
SQL 关系型数据库 MySQL
sql处理重复的列,更好理清分组和分区
sql处理重复的列,更好理清分组和分区
74 0
|
存储 自然语言处理 NoSQL
【Java项目】1000w数据量的表如何做到快速的关键字检索?
【Java项目】1000w数据量的表如何做到快速的关键字检索?
96 0
【SQL开发实战技巧】系列(二十五):数仓报表场景☞结果集中的重复数据只显示一次以及计算部门薪资差异高效的写法以及如何对数据进行快速分组
本篇文章讲解的主要内容是:***如何使用lag函数让结果集重复数据只显示一次、用行转列pivot写法优化部门之间计算工资差异类似需求、如何通过ceil函数对已有数据进行分组打印、放假安排团队分组值班,如何通过ntile()over(order by )快速进行人员分组***
【SQL开发实战技巧】系列(二十五):数仓报表场景☞结果集中的重复数据只显示一次以及计算部门薪资差异高效的写法以及如何对数据进行快速分组
|
SQL 移动开发 BI
【SQL开发实战技巧】系列(二十三):数仓报表场景☞ 如何对数据排列组合去重以及通过如何找到包含最大值和最小值的记录这个问题再次用执行计划给你证明分析函数性能不一定高
怎样对数据组合重新排列并去重的问题、通过如何找到包含最大值和最小值的记录这个问题再次用执行计划给你证明分析函数性能不一定高【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。本篇文章主要介绍的两个方面,第一个方面曾经有好几个网友和同事问我,第二个问题真的是很多同行的通病,认为分析函数是万金油,一股脑用。
【SQL开发实战技巧】系列(二十三):数仓报表场景☞ 如何对数据排列组合去重以及通过如何找到包含最大值和最小值的记录这个问题再次用执行计划给你证明分析函数性能不一定高
【SQL开发实战技巧】系列(二十六):数仓报表场景☞聊聊ROLLUP、UNION ALL是如何分别做分组合计的以及如何识别哪些行是做汇总的结果行
本篇文章讲解的主要内容是:***ROLLUP、UNION ALL是如何分别做分组合计的以及如何通过CUBE 、GROUPING、GROUPING_ID 识别哪些行是做汇总的结果行***
【SQL开发实战技巧】系列(二十六):数仓报表场景☞聊聊ROLLUP、UNION ALL是如何分别做分组合计的以及如何识别哪些行是做汇总的结果行
|
数据挖掘
无事来学学--Kettle中应用,统计,映射组件的使用
应用组件 转换里面的第五个分类。应用都是一些工具类。
250 0
|
分布式计算 Hadoop 开发者
分组排序案例扩展| 学习笔记
快速学习分组排序案例扩展
分组排序案例扩展| 学习笔记
《Drools 7 规则引擎教程》番外篇-规则条件匹配机制
《Drools 7 规则引擎教程》番外篇-规则条件匹配机制
319 0
|
SEO
聚合思想是什么?聚合页面有哪些类型?
做好了站内优化的基本步骤,接下来SEO的主要工作是挖掘长尾关键词、分布优化长尾关键词、发布内容、外链资源建设、优化URL等。 一段时间后,经过我们编辑的辛苦工作,我们网站上会存在很多内容了,成千上万篇,甚至更多。 我们说,一篇内容一般承载1-2个长尾关键词,如果我们发布了一万篇内容,这些内容就承载了1-2万个长尾关键词。
134 0
|
SQL Oracle 关系型数据库
Oracle数据库之五 限定查询和排序显示
Oracle数据库之五 限定查询和排序显示五、限定查询和排序显示5.1、限定查询5.1.1 认识限定查询例如:如果一张表中有 100w 条数据,一旦执行了 “ SELECT * FROM 表 ” 语句之后,则将在屏幕上显示表中全部数据行的记录,这样既不方便浏览,也可能造成死机的问题,所以此时就必须对查询的结果进行筛选,只选出对自己有用的数据即可,那么就可以通过 WHERE 指定查询的筛选条件。
1024 0