2011-03-31 54 views
6

我有一个HQL查询:如何将HQL与Group By转换为QueryOver?

select max(l.Num) from SomeTable l group by l.Type, l.Iteration 

如何翻译/将其转换为QueryOver?

下列操作之一:

var grouped = session.QueryOver<SomeTable>() 
    .SelectList(l => l 
     .SelectGroup(x => x.Type) 
     .SelectGroup(x => x.Iteration) 
     .SelectMax(x => x.Num)); 

将生成SQL:

SELECT 
    MAX(l.Num), 
    l.Type, 
    l.Iteration 
FROM 
    SomeTable l 
GROUP BY 
    l.Type, 
    l.Iteration 

这不是我所期待的 - 我不希望有类型和迭代的选择。

我使用该查询作为select z from c where z IN (subquery)的子查询。

+0

AFAIK仍然不可能与查询/标准,请参阅https://nhibernate.jira.com/browse/NH-1426 – Firo 2015-06-12 08:43:16

回答

0

尝试用这种说法,我用假名和UnderlyingCriteria

SomeTable someTb = null; 

var grouped = session.QueryOver<SomeTable>(() => someTb) 
       .SelectList(l => l.SelectMax(() => someTb.lnum)) 
       .UnderlyingCriteria.SetProjection(
            Projections.Group(() => someTb.Type) 
            ,Projections.Group(() => someTb.Iteration)) 
       .List(); 

我希望这是有帮助的。

+0

@Feber - 谢谢,但这是行不通的。 Underlying Criteria只是允许在QueryOver中使用条件查询。此外,您提供的查询还会执行:“选择类型,按类型迭代SomeTable组,迭代” - 不是事件选择最大值。 – Gutek 2011-04-01 11:21:26