【问题标题】:Getting the newest post from a topic using ICriteria (Nhibernate)使用 ICriteria (Nhibernate) 从主题中获取最新帖子
【发布时间】:2011-05-18 14:27:35
【问题描述】:

在论坛中,我想列出每个主题的最新帖子。 在 SQL 中,我可以使用 Max(Post.Date) 的主题分组进行子查询,然后与 Posts 表进行内部连接,以从每个主题中获取最新的 Post 记录。 如何在 ICriteria 中重现这个?

DETAIL:Topic 类没有 Posts 属性。

目标 SQL: 选择帖子。* FROM Posts, (SELECT IdTopic, MAX(DATE) AS Date FROM Posts GROUP BY IdTopic) AS MaxDates 其中 MaxDates.IdTopic = Posts.IdTopic AND MaxDates.Date = Posts.Date

Tks[]

帕特里克·科埃略

【问题讨论】:

  • 您能否使用您希望 ICriteria 为您生成的 SQL 更新您的帖子?此外,如果您提供架构,或者至少提供架构的相关部分,将会很有帮助。
  • @cs 已更新目标 SQL 查询。

标签: nhibernate group-by subquery icriteria


【解决方案1】:

通过使用 CreateCriteria。 Ayende Rahien 很好地解释了这一点。

编辑改为解决 OP 的 cmets

我在这方面处于不稳定状态,但这可能会让你开始:

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>();

【讨论】:

  • 很好的解决方案,但不幸的是,Topic 类没有 Posts 属性。
  • @Steve Post 类有一个 Topic 属性。
  • @Patrick 一个奇怪的设置。每个表中用于相互关联的字段是什么?
  • @Steve 在数据库中被 IdPost 字段引用
  • @Steve Subqueries.Select -> 子查询不包含 Select 方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多