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')
)

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

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

我想我只是不确定如何构建我的子查询。我在这方面走的是正确的道路吗?

4

1 回答 1

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>();
于 2012-11-27T20:41:46.000 回答