Nhibernate и не - существует запрос

Я пытаюсь создать запрос в 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 и псевдонимы. Любое руководство ценилось бы!

Спасибо!

6
задан Dan 6 May 2010 в 10:45
поделиться

1 ответ

это будет переведено в этот 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>()
7
ответ дан 17 December 2019 в 00:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: