NHibernate查询以获取给定List属性的top(x)实体

时间:2011-08-12 04:45:55

标签: nhibernate nhibernate-criteria

我很难搞清楚如何做以下事情。

鉴于以下类别:

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

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

如何编写查询以仅获取按日期降序排序的给定帖子的前10条评论?

由于CommentPost没有引用,我无法查询Comment,我需要查询Post,但我的所有查询似乎都是返回Post,我的投射尝试失败了。

我无法从Post添加引用Comment的属性(BTW实际上不是我的域模型),所以我被卡住了。

我希望我不会错过一些明显的东西。

修改

如果有评论到帖子

的引用,这会给我我想要的
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 :(得分:0)

以下是使用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中找到一种方法。