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)