2012-11-27 34 views
1

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

想通了:

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