我想知道如何根据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...
但似乎无法进一步发展 - 除非我遗漏了一些明显的东西?
答案 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();