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 ,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值