1

我想知道如何根据 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...

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

4

2 回答 2

2

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

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

将像在 SQL 中一样执行

SELECT
  *
FROM
  OuterTable
WHERE 1 < (SELECT COUNT(*) FROM InnerTable WHERE ...)
于 2013-07-02T14:48:09.393 回答
1
Parent parentAlias = null;
var subquery = QueryOver.Of<Child>().Where(child.Parent.Id == parentAlias.Id);
var query = session.QueryOver(() => parentAlias)
    .WithSubquery.WhereExists(subquery)
    .List();
于 2013-06-06T08:03:42.240 回答