Как конвертировать HQL с Group By в QueryOver? - PullRequest
6 голосов
/ 01 апреля 2011

У меня есть HQL-запрос:

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

, что не то, что я ожидаю - я не хочу, чтобы Type и Iteration в Select,

Я использую этот запрос как подзапрос для select z from c where z IN (subquery).

1 Ответ

0 голосов
/ 01 апреля 2011

попробуйте с этим утверждением, я использовал псевдонимы и 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();

Надеюсь, это полезно.

...