我有 tableA 和 tableB
tableA具有 B_Id 属性。
此查询正常工作:
IEnumerable<A> a = Session.Query<A>().Fetch(r=>r.B);
但我想要的是:
IEnumerable<A> a = Session.Query<A>().Where(r=>r.B.Active).Fetch(r=>r.B);
似乎当我这样做时,它不再是一个简单的外连接,如果表B中没有活动记录,我就没有结果。
我想做一个纯粹的外部连接,它仍会给我结果,但是A实体的B属性为null。
nhibernate LINQ是否支持在外连接表上放置where子句的能力?
答案 0 :(得分:3)
根据this post on the nhusers group,它显然不受支持,你必须使用HQL。
至于为什么,我会推测作者计划添加它但具有更高的优先级。我个人认为这是一个关键特征。
答案 1 :(得分:0)
猜猜:.Where(a => a.B == null || a.B.Active)
一个想法:您正在尝试选择将处于未知状态的A实例。 NHibernate如何在A的实例之间有所不同,其中B == null和B.Active == false?
如果它起作用,它们将返回B的空值,并且将使用空引用填充A.如果再次保存A会发生什么?是否应将对B的引用设置为null?当B.Active == false时,这将删除引用。应该不受影响吗?这将使NHibernate存储一个不代表您的域对象的状态。