在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)));
我想我只是不确定如何构建我的子查询。我是否会走上正确的道路?
答案 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>();