为什么不能使用内部联接过滤子集合?

时间:2015-07-27 15:58:21

标签: c# nhibernate queryover

请参阅https://mindfulsoftware.com.au/guidance/nhibernate-getting-up-and-running/querying-collections-efficiently-with-nhibernate

有两个实体:

Employee -1..n- Order

提出了这个问题:

employee = Session.QueryOver<Employee>()
             .Where(x => x.EmployeeId == 2)
             .JoinQueryOver<mdl.Order>(x => x.Orders, JoinType.InnerJoin)
             .Where(o => o.ShippedDate == null)
             .SingleOrDefault();

填充整个ChildCollection - 无论过滤器。

当我使用LeftOuterJoin时,它正常工作:

employee = Session.QueryOver<Employee>()
             .Where(x => x.EmployeeId == 2)
             .JoinQueryOver<mdl.Order>(x => x.Orders, JoinType.LeftOuterJoin)
             .Where(o => o.ShippedDate == null)
             .SingleOrDefault();

修改
问题是,带有InnerJoin的QueryOver将加载所选Employee的所有订单(不正确,因为有一个Where-Clause with ShippedDate == null),QueryOver with Left Outer Join将只获取带有ShippedDate的订单== null(我认为这是正确的行为)。

有人可以解释一下,为什么InnerJoin没有按预期工作?这是NHibernate的设计吗?

感谢您提供的信息。

0 个答案:

没有答案