我有个问题。我有人和猫。每个 Person 都有一些 Cats(Cats 中有一个外键指向 Persons 中的主键)。每只猫都有一个年龄。我想选择有“老”猫的人。我想要这些人的所有猫,而不仅仅是“老”猫。我需要使用 QueryOver 语法来完成。
在 T-SQL 中它会是这样的:
SELECT P.*, C.*
FROM Persons P
LEFT JOIN Cats C
ON P.Id = C.OwnerId
WHERE EXISTS (
SELECT 1
FROM Cats C2
WHERE P.Id = C2.OwnerId AND C2.Age > 5)
我知道我必须使用子查询,并且我可以轻松地使用“旧”的 nhibernate 语法(Criteria/DetachedCriteria),但我不能在 QueryOver 语法中做到这一点。
我不想要“IN”条件。我的主键是一个复杂的键,所以我不能用 IN 来做。
var persons = session.QueryOver<Person>.WithSubquery.WhereExists( ??? );