Я пытаюсь создать запрос в NHibernate для возврата списка клиентов без заказов, соответствующих определенные критерии.
Мой Клиентский объект содержит ряд Заказов:
<set name="Orders">
<key column="CustomerID" />
<one-to-many class="Order" />
</set>
Как я создаю запрос с помощью API NHIBERNATE ICriteria для получения списка всех клиентов, у которых нет заказов? Используя собственный SQL, я могу представить запрос как это:
select * from tblCustomers c where not exists
(select 1 from tblOrders o where c.ID = o.CustomerID)
Я не мог выяснить, как сделать это использование объекты DetatchedCriteria и псевдонимы. Любое руководство ценилось бы!
Спасибо!
это будет переведено в этот sql...
session.CreateCriteria<Customer>("c")
.Add(Subqueries.NotExists(
DetachedCriteria.For<Order>("o")
.SetProjection(Projections.Constant(1))
.Add(Restrictions.PropertyEq("c.ID", "o.Customer.ID"))
//Add more order restricitions here
))
.List<Customer>();
если вам нужны только клиенты без заказов, вы также можете использовать Restrictions.IsEmpty()
, чтобы сделать то же самое, что и выше.
session.CreateCriteria<Customer>()
.Add(Restrictions.IsEmpty("Orders"))
.List<Customer>()