2011-03-31 23 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