Как и предположил dotjoe, я считаю, что предложения having
выполняются путем сохранения проекции во временной переменной с последующим использованием ее как в списке проекций, так и в списке ограничений, хотя я делал это только с запросами ICriteria
,не QueryOver
.
Другой способ написать этот запрос - использовать два подзапроса - один для представления размера, который вы ищете, другой для представления всех остальных размеров.Что-то вроде ...
select *
from Orders o
where
exists (
select d1.Id
from OrderDetail d1
where
d1.Order_id = o.Id
and d1.Size = @size)
and not exists (
select d2.Id
from OrderDetail d2
where
d2.Order_id = o.Id
and d2.Size <> @size);
Мы могли бы сделать этот ответ еще на шаг и перевести его в запрос QueryOver
, но я не хочу портить вам удовольствие.Этого достаточно, чтобы вы указали в правильном направлении?