c# - 帮助 QueryOver 和 WhereExists

标签 c# nhibernate fluent-nhibernate queryover

我有一个问题。我有人和猫。每个人都有一些猫(猫中有一个外键指向人中的主键)。每只猫都有一个年龄。我想选择拥有“老”猫的人。我想要这些人的所有猫,而不仅仅是“老”猫。 我需要使用 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( ??? );

最佳答案

示例取自 this page并改编(用我自己的类(class)测试):

技巧似乎是使用别名。

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>();

关于c# - 帮助 QueryOver 和 WhereExists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5194900/

相关文章:

c# - NHibernate 实体投影

asp.net-mvc - NHibernate: "failed to lazily initialize...",DDD方法

c# - Fluent NHibernate 多对多中的 Where 子句

nhibernate - 对 nHibernate 的 ISession 和预加载的关注点分离感到困惑

c# - Razor 编译错误

c# - 如何为调试和发布配置编写测试

c# - 发生异常后不刷新 session

entity-framework - EF Fluent 中的 Reference( Fluent nhibernate) 等效项是什么?

c# - ASP.net MVC 2.0 使用相同的表单进行添加和编辑

c# - 高斯模糊导致图像周围出现白框