Asp.net mvc 3 JoinQueryOver在QueryOver中选择notin列表
我有一个通过代码获取的记录列表:Asp.net mvc 3 JoinQueryOver在QueryOver中选择notin列表,asp.net-mvc-3,nhibernate,queryover,Asp.net Mvc 3,Nhibernate,Queryover,我有一个通过代码获取的记录列表: var list= NhSession.QueryOver<Data.Models.MembModel>() .Where(w => w.Comp.Id == idcomp) .JoinQueryOver(jq => jq.Ver) .Select(s => s.Ver) .List<Dados.
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>();
var list=NhSession.QueryOver()
.其中(w=>w.Comp.Id==idcomp)
.JoinQueryOver(jq=>jq.Ver)
.选择(s=>s.Ver)
.List();
通过这段代码,我得到了一个与MembModel相关的VerModel列表。问题是我得到的VerModel列表与MembModel不相关,我想描述一下,我想在第一个列表中选择一个“不在”的列表。我该怎么做
正如您所说,我们需要的是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);
var subquery=QueryOver.Of()
//我们仍然可以筛选此子选择。。。还是不
//.其中(w=>w.Comp.Id==idcomp)
//我们需要返回的是引用id,VerModel.id
.选择(m=>m.Ver.ID);
现在我们将使用NOT IN(subquery)子句查询VerModel本身:
var list=session.QueryOver()
.带subquery
.WhereProperty(v=>v.ID)//与上一个所选ID匹配的ID
.NotIn(子查询)//不应位于
.List();
检查:
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>();