NHibernates QueryOver和反向关联

时间:2017-03-30 09:46:37

标签: c# nhibernate queryover

如何使用NHibernate C找不到没有引用的QueryOver类?

public class A {
    public List<C> c { get; set; }
}

public class B {
    public List<C> c { get; set; }
}

public class C {
}

SQL中的相同:

select C.* from C
left join A on C.Id = A.C
left join B on C.Id = B.C
where A.Id is null and B.Id is null

如果我只有一次加入,那么这样的事情就可以了:

session.QueryOver<A>(() => a)
    .Right.JoinQueryOver(() => a.C, () => c)
    .WhereRestrictionOn(() => a.DbId)
    .IsNull
    .List() // TODO: use transfomer to select C

编辑:我不确定引用是List<C>还是仅仅C是否重要。

无论如何,我很感兴趣我如何在C处查询查询,然后在我没有直接path可用的地方进行加入

1 个答案:

答案 0 :(得分:0)

这样的事情似乎有效,但不是我希望的答案:

C c = null;
var aSubquery = QueryOver.Of<A>()
    .JoinAlias(a => a.C, () => c)
    .Select(Projections.Property(() => c.Id));
var bSubquery = QueryOver.Of<B>()
    .JoinAlias(b => b.C, () => c)
    .Select(Projections.Property(() => c.Id));
session.QueryOver<C>()
    .WithSubquery
    .WhereProperty(x => x.Id).NotIn(aSubquery)
    .WithSubquery
    .WhereProperty(x => x.Id).NotIn(bSubquery);

如果您有更好的答案,请提供替代方案。