xan*_*tos 12 c# nhibernate fluent-nhibernate queryover
我有个问题.我有人和猫.每个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)
Run Code Online (Sandbox Code Playgroud)
我知道我必须使用子查询,并且我可以轻松地使用"旧的"nhibernate语法(Criteria/DetachedCriteria),但我无法在QueryOver语法中执行此操作.
我不想要"IN"状态.我的主键是一个复杂的键,所以我无法使用IN.
var persons = session.QueryOver<Person>.WithSubquery.WhereExists( ??? );
Run Code Online (Sandbox Code Playgroud)
Flo*_*Lim 27
从本页获取的示例并进行了调整(使用我自己的类测试):
诀窍似乎是使用别名.
Person personAlias = null;
IList<Person> persons =
session.QueryOver<Person>(() => personAlias).WithSubquery
.WhereExists(QueryOver.Of<Cat>()
.Where(c => c.Age > 5)
.And(c => c.Owner.Id == personAlias.Id)
.Select(c => c.Owner))
.List<Person>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7479 次 |
| 最近记录: |