我怎样才能在HQL中表达这一点

时间:2008-11-20 23:09:15

标签: nhibernate hibernate hql

我一直坚持这个查询一段时间了。 SQL返回我想要的结果,但我无法弄清楚如何在HQL中表达查询。

这是 SQL

select      thread.ThreadId,
            thread.Title,
            thread.CreatedOn, 
            thread.ViewCount,
            thread.CreatedBy,
            thread.ForumId 

from Threads thread 
where 
    (thread.ThreadId in(select post.ThreadId from Posts post 
    where (post.CreatedBy=2 )))

AND

(2!=(select TOP 1 post2.CreatedBy from Posts post2 
        where (post2.ThreadId=thread.ThreadId ) ORDER BY post2.CreatedOn DESC))

我认为我需要使用DetachedCriteria来创建相关的子查询,但我遇到了真正的问题。

到目前为止

DetachedCriteria latestPostInThread = DetachedCriteria.For(typeof (ForumPost), 
                    "post2")
            .Add(Expression.EqProperty("post2.ThreadId", "post.ThreadId"))
            .AddOrder(Order.Desc("CreatedOn"))
            .SetFirstResult(0)
            .SetMaxResults(1);

以及主查询

ICriteria critMain = CreateCriteria(typeof (ForumPost), "post")
            .Add(Expression.Eq("CreatedBy",user.ID))
            .Add(Subqueries.Ne("CreatedBy", latestPostInThread));

这显然不正确 - 我需要从latestPostInThread获取userId才能将它用作我的子查询,但我完全被难倒了。

非常感谢任何帮助!我不愿意回到SQL,因为我确信在nHibernate中并不是特别难以实现的。

0 个答案:

没有答案