2014-04-01 99 views
0

我有記錄的名單,我拿起通過代碼:JoinQueryOver在QueryOver選擇notin列表

var list= NhSession.QueryOver<Data.Models.MembModel>() 
       .Where(w => w.Comp.Id == idcomp) 
       .JoinQueryOver(jq => jq.Ver) 
       .Select(s => s.Ver) 
       .List<Dados.Models.VerModel>(); 

有了這個代碼,我得到VerModel的名單,我有一個MembModel關係。問題是我得到的VerModel列表與MembModal沒有關係,我想要描述這一點,我想選擇一個「不在」第一個列表的列表。我怎樣才能做到這一點?

韓國社交協會

回答

0

我們所需要的,如你所說,是一個NOT IN(子查詢)語句。 NHibernate確實有一個明確的方法來實現這一點。首先,子查詢,這將返回MembModel集合(過濾與否 - 如需要),由VerModel.ID

var subquery = QueryOver.Of<Data.Models.MembModel>() 
    // we can still filter this sub-select ... or not 
    // .Where(w => w.Comp.Id == idcomp) 
    // what we need to be returned is the reference id, the VerModel.ID 
    .Select(m => m.Ver.ID); 

代表現在,我們將查詢VerModel本身,與NOT IN(子查詢)子句:

var list = session.QueryOver<Dados.Models.VerModel>() 
    .WithSubquery 
     .WhereProperty(v => v.ID) // the ID to match the prev selected one 
     .NotIn(subquery)   // should NOT be IN 
    .List<Dados.Models.VerModel>(); 

檢查: