在QueryOver中JoinQueryOver选择notin list

时间:2014-04-01 16:57:50

标签: 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.Models.VerModel>();

使用此代码,我得到一个与MembModel中有关系的VerModel列表。问题是我得到的MeMModal中没有关联的VerModel列表,我想要描述一下,我想选择一个列表是&#34; notin&#34;第一个清单。我怎么能这样做?

Tks

1 个答案:

答案 0 :(得分: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);

现在我们将使用NOT IN(子查询)子句查询VerModel本身:

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

检查: