2015-05-26 117 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>();