У меня есть запрос в Nhibernate QueryOver, который возвращает коллекцию объектов эпизодов (эпизод является заклинанием заботы), который, в свою очередь, имеет коллекцию статусов эпизодов как свойство каждого эпизода.Однако я хочу изменить это так, чтобы каждый эпизод возвращал только последнее обновление статуса для этого эпизода вместо всех.
SQL для этого выглядит следующим образом:
SELECT *
FROM DIPEpisode e
INNER JOIN DIPEpisodeStatus s on s.EpisodeID = e.SequenceID
WHERE e.ClientID = '1000001'
AND s.SequenceID IN (
SELECT TOP 1 SequenceID
FROM DIPEpisodeStatus s
WHERE s.EpisodeID = e.SequenceID
ORDER BY StatusRecordedDate DESC
)
Я написал следующий запрос, который дает мне почти точно то, что мне нужно
var statuses =
QueryOver.Of<DIPEpisodeStatus>()
.OrderBy(x => x.StatusRecordedDate).Desc
.Select(x => x.Id).Take(1);
DIPEpisodeStatus statusAlias = null;
return
session.QueryOver<DIPEpisode>()
.JoinQueryOver(x => x.DIPEpisodeStatuss, () => statusAlias)
.Fetch(x => x.AgencyID).Eager
.Fetch(x => x.DIPEpisodeStatuss).Eager
.Where(e => e.ClientID.Id == this.clientId)
.WithSubquery.WhereProperty(x => x.Id).Eq(statuses)
.List();
Это генерирует следующий SQL:
SELECT *
FROM DIPEpisode this_
inner join DIPEpisodeStatus statusalia1_
on this_.SequenceID = statusalia1_.EpisodeID
WHERE statusalia1_.ClientID = '1000001' /* @p0 */
and statusalia1_.SequenceID = (SELECT TOP (1 /* @p1 */) this_0_.SequenceID as y0_
FROM DIPEpisodeStatus this_0_
ORDER BY this_0_.StatusRecordedDate desc)
Как видите, единственное, чего не хватает, это гдепункт из подзапроса.Какие изменения мне нужно внести в запрос, чтобы сгенерировать это дополнительное предложение where и получить только самое последнее обновление статуса?
Спасибо
Бен