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查寻还有很长的路要走。