Короче говоря: с учетом агрегированного запроса (один с Max, Min, Count и т. Д.) В NHibernate, как вы можете изменить запрос, чтобы он также возвращал полную запись , связанную с агрегированным значением?
Мой пример: у меня есть 2 таблицы: People
(первичный ключ: PersonId) с отношением 1-ко-многим к Events
(первичный ключ: EventId; другие столбцы: PersonId, EventDate).
Я хочу выбрать последнее событие на человека и сгенерировать список этих событий . SQL для последнего события на человека будет выглядеть примерно так: SELECT PersonId, Max(EventDate) FROM ... GROUP BY PersonId
. Пока что запрос NHibernate выглядит так:
ICriteria criteria = session.CreateCriteria<Event>()
.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty("PersonId"))
.Add(Projections.Max("EventDate"))
);
Теперь мне действительно нужна полная информация о событии 1020 *. Одно из теоретических решений заключается в том, чтобы по существу объединить вышеуказанные критерии с таблицей Events
с помощью PersonId и максимального значения EventDate (достаточно просто в простом SQL). Однако я не знаю, как это сделать в NHibernate.
Я открыт для любых предложений (HQL, LINQ и т. Д.), Если они избегают хранимых процедур и представлений и ограничены 1 или несколькими запросами. В моем случае выдача запроса на человека не будет масштабируемой или производительной.