如何返回不在给定列表中的实体列表

时间:2012-11-27 19:36:59

标签: c# nhibernate nhibernate-criteria

NHibernate中,如何返回不在给定列表中的实体列表?

假设我有一个Client实体,我有一个名为IList<Client> notInClients的列表。我知道我希望我的sql会出现这样的结果:

SELECT *
FROM Clients c1
WHERE c1.ClientId NOT IN (
    SELECT *
    FROM Clients c2
    WHERE c2.ClientId IN ('1', '2', '3', '4')
)

我假设我需要使用DetachedCriteria。也许是这样的:

var clients = session.CreateCriteria("c1")
    .Add(
        Subqueries.PropertyNotIn("c1.ClientId",
            DetachedCriteria.For<Client>("c2").HOW_DO_I_ADD_MY_LIST)));

我想我只是不确定如何构建我的子查询。我是否会走上正确的道路?

1 个答案:

答案 0 :(得分:1)

想出来:

var notGuids = from c in notClients
               select c.ClientId;

var clients = unitOfWork.Session.CreateCriteria(typeof(Client))
    .Add(Expression.Not(Expression.In("ClientId", notGuids.ToArray()))).List<Client>();