NHibernate WHERE Subquery Equals / GreaterThan / LessThan

时间:2013-06-05 13:49:30

标签: nhibernate

我想知道如何根据NHibernate中子查询的值来限制外部查询中的结果。

sql看起来像:

SELECT
    p.*
FROM
    ParentTable p
WHERE
    (SELECT COUNT(c.Id) FROM ChildTable c WHERE c.ParentId = p.Id) > n

我到目前为止:

Parent parentAlias = null;
Child childAlias = null;
var query = Session.QueryOver(() => parentAlias);
var subquery = Session.QueryOver(() => childAlias).Where(childAlias.Parent.Id == parentAlias.Id);
query.WithSubquery...

但似乎无法进一步发展 - 除非我遗漏了一些明显的东西?

2 个答案:

答案 0 :(得分:2)

我解决了这个问题。这是一个伪示例:

outerQuery.WithSubquery.WhereValue(int).Lt(subquery);

将像在SQL中一样执行

SELECT
  *
FROM
  OuterTable
WHERE 1 < (SELECT COUNT(*) FROM InnerTable WHERE ...)

答案 1 :(得分:1)

Parent parentAlias = null;
var subquery = QueryOver.Of<Child>().Where(child.Parent.Id == parentAlias.Id);
var query = session.QueryOver(() => parentAlias)
    .WithSubquery.WhereExists(subquery)
    .List();