【问题标题】:NHibernate query to fetch top(x) entities for a given List propertyNHibernate 查询以获取给定 List 属性的 top(x) 实体
【发布时间】:2011-08-16 08:08:55
【问题描述】:

我很难弄清楚如何执行以下操作。

给定以下类:

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

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

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

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

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

我希望我没有遗漏一些明显的东西。

编辑:

如果有从评论到帖子的引用,这将给我我想要的东西

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

但没有,所以我在 Post 上寻找返回 10 条评论列表的等效查询。

如果可以通过 Linq 进行查询,那是我更喜欢的,但使用 QueryOver 会很高兴。

我可能只是最终改写我的领域模型,以便有那个参考。

【问题讨论】:

  • 发布您遇到的问题的代码,以便我们更好地了解如何回答问题(例如,我们是否为您提供 HQL、Criteria、QueryOver 等)。

标签: nhibernate nhibernate-criteria


【解决方案1】:

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

【讨论】:

  • 谢谢,确实有效。最后,我更改了我的域模型以使查询更容易。
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多