NHibernate-запрос для выборки лучших (x) объектов для заданного свойства List - PullRequest
2 голосов
/ 12 августа 2011

Мне трудно понять, как сделать следующее.

Даны следующие классы:

public class Post
{
   ...
   public IList<Comment> Comments
   ...    
}

public class Comment
{
    public DateTime CommentDate
    ... Some other properties but no reference to Post...
}

Как мне написать запрос, чтобы получить только первые 10 комментариев для данного поста, упорядоченные по убыванию даты?

Поскольку нет ссылки от Comment до Post, я не могу запросить на Comment, мне нужно запросить на Post, но все мои запросы, похоже, возвращают Post, и мои попытки при проекции не удалось.

Я не могу добавить свойство, ссылающееся на Post из Comment (кстати, это не моя модель домена), поэтому я застрял.

Надеюсь, я не упускаю ничего очевидного.

Edit:

Это дало бы мне то, что я хочу, если бы была ссылка из Комментария к Посту

var query = (from comment in Session.Query<Comment>() orderby comment.CommentDate 
where comment.Post == some Post select comment).Take(10);

но нет, поэтому я ищу эквивалентный запрос на Post, который возвращает список из 10 комментариев.

Если запрос возможен через Linq, это то, что я предпочел бы, но был бы достаточно счастлив, используя QueryOver.

Я мог бы просто переделать мою модель предметной области, чтобы была эта ссылка.

1 Ответ

0 голосов
/ 16 августа 2011

Вот решение с использованием HQL:

var postId = 1;
var hql = "select p.Comments from Post p join p.Comments c where p.PostId = :postId order by c.CommentDate desc";
var result = session.CreateQuery(hql)
    .SetParameter("postId", postId)
    .SetMaxResults(10)
    .List<Comment>();

Я не смог найти способ сделать это в Criteria API.

...