Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 JoinQueryOver在QueryOver中选择notin列表_Asp.net Mvc 3_Nhibernate_Queryover - Fatal编程技术网

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