Получение новейшего сообщения из темы с использованием ICriteria (Nhibernate) - PullRequest
0 голосов
/ 18 мая 2011

На форуме я хочу перечислить самые последние сообщения по каждой теме.В SQL я могу сделать подзапрос с группировкой по теме, взяв Max (Post.Date), а затем выполнить внутреннее соединение с таблицей Posts, чтобы получить последнюю запись Post из каждой темы.Как мне воспроизвести это в ICriteria?

ПОДРОБНОСТЬ: у класса Topic нет свойства Posts.

TARGET SQL: SELECT Post. * FROM Posts, (SELECT IdTopic, MAX (DATE) AS Date)ОТ сообщений ГРУППА ПО IdTopic) КАК MaxDates ГДЕ MaxDates.IdTopic = Posts.IdTopic И MaxDates.Date = Posts.Date

Tks []

Патрик Коэльо

1 Ответ

0 голосов
/ 18 мая 2011

Используя CreateCriteria.Это очень хорошо объясняется Ayende Rahien .

Редактировать изменено с учетом комментариев OP

Я здесь шаткий, но это можетНачало работы:

DetatchedCriteria posts = DetachedCriteria.For<Post>("p")
    .SetProjection(Projections.Property("p.IdPost"));        
    .Add(Restrictions.EqProperty("t.IdPost", "p.IdPost"));

DetachedCriteria postMax = DetachedCriteria.For<Post>, "p2")
    .SetProjection(Projections.Max("Date"));

var topics Session.CreateCriteria<Topic>("t")
    .Add(Subqueries.Select(postMax))
    .Add(Subqueries.Exists(posts)).List<Topic>();
...