我很难搞清楚如何做以下事情。
鉴于以下类别:
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
的属性(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会很开心。
我可能最终会重新修改我的域模型,以便有那个参考。
答案 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中找到一种方法。