流畅的nHibernate限制.似乎不能正常工作

本文关键字:常工作 工作 不能 nHibernate 限制 | 更新日期: 2023-09-27 17:50:42

我有关联:

TableA 1 --- * TableB 

我尝试构建一个查询,它返回TableA项的列表,其所有项(TableB)在列XY中具有值。但是这个查询似乎忽略了not null condition in the X and Y column,为什么?

或者,如何重新构建该查询,可能是使用子查询?

TableA tabA = null;
TableB tabB = null;
var s = Session.QueryOver<TableA>(() => tabA)
                       .JoinAlias(() => tabB.TableBItems, () => tabB, JoinType.InnerJoin)
                       .Where(Restrictions.Conjunction()
                                          .Add(() => tabA.SomeID == 123)
                                          .Add(() => tabA.SomeNullableDate != null)
                             )
                       .Where(Restrictions.Not(
                                Restrictions.Conjunction()
                                            .Add(() => tabB.X == null)
                                            .Add(() => tabB.Y == null)
                             ))
                       .List<TableA>();

流畅的nHibernate限制.似乎不能正常工作

使用子查询过滤掉tabB-Items中具有空值的TableA元素

var subquery = QueryOver.Of<TableA>()
    .JoinQueryOver(tabA => tabA.TableBItems)
        .Where(tabB => tabB.X == null || tabB.Y == null)
    .Select(Projections.Id());
var s = Session.QueryOver<TableA>()
    .Where(tabA => tabA.SomeID == 123 && tabA.SomeNullableDate != null)
    .WhereRestrictionOn(Projections.Id()).NotIn(subquery)
    .JoinQueryOver(tabA => tabA.TableBItems)
        .Where(tabB => tabB.X != null && tabB.Y != null)
    .List<TableA>();