2015-05-26 94 views
0

我有关联关系:功能NHibernate Restrictions.Not似乎不能正常工作

TableA 1 --- * TableB 

我尝试建立一个查询,返回我TableA项目,其所有(TableB)的列表中有值在列XY。但是这个查询似乎忽略了那个,为什么?

或者,如何重建该查询,也许玩子查询?

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>(); 

回答

1

使用查询中过滤掉具有塔布项空值表A元素

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>();