NHibernate带条件的左联接或null
我有两个对象,NHibernate带条件的左联接或null,nhibernate,Nhibernate,我有两个对象,Project和UsageLast30映射为一对一 我试图查询所有项目,这些项目要么还没有UsageLast30,要么在阈值之前有一个日期属性的UsageLast30 如果使用查询,则会出现空引用异常: session.QueryOver<Project>(() => p) .Left.JoinAlias(() => p.UsageLast30, () => u) .Where(() => u == null || u.LastC
Project
和UsageLast30
映射为一对一
我试图查询所有项目,这些项目要么还没有UsageLast30,要么在阈值之前有一个日期属性的UsageLast30
如果使用查询,则会出现空引用异常:
session.QueryOver<Project>(() => p)
.Left.JoinAlias(() => p.UsageLast30, () => u)
.Where(() => u == null || u.LastCalculated < threshold)
我仍然不知道为什么在
p.UsageLast30
上测试null会生成错误的null测试,但是测试null属性而不是null对象会给出正确的SQL查询。例如:
session.QueryOver<Project>(() => p)
.Left.JoinAlias(() => p.UsageLast30, () => u)
.Where(() => u.LastCalculated == null || u.LastCalculated < threshold)
session.QueryOver(()=>p)
.Left.JoinAlias(()=>p.UsageLast30,()=>u)
。其中(()=>u.lastcomputed==null | | u.lastcomputed<阈值)
注意与u==null
WHERE (this_.project_id is null
or u1_.last_calculated < '2015-09-08T18:18:51' /* @p0 */)
<class name="Analytics.Core.Project" table="project">
<id name="Id" column="project_id">
<generator class="identity" />
</id>
<!-- ... -->
<one-to-one name="UsageLast30" constrained="false" foreign-key="none" />
</class>
<class name="Analytics.Core.ProjectUsageLast30" table="project_usage30">
<id name="ProjectId" column="project_id">
<generator class="foreign">
<param name="property">Project</param>
</generator>
</id>
<!-- ... -->
<one-to-one name="Project" constrained="true" />
</class>
session.QueryOver<Project>(() => p)
.Left.JoinAlias(() => p.UsageLast30, () => u)
.Where(() => u.LastCalculated == null || u.LastCalculated < threshold)