首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nhibernate和not-exists查询

Nhibernate和not-exists查询
EN

Stack Overflow用户
提问于 2010-05-06 18:45:34
回答 1查看 2.6K关注 0票数 6

我正尝试在NHibernate中构造一个查询,以返回没有订单与特定条件匹配的客户列表。

我的Customer对象包含一组订单:

代码语言:javascript
复制
<set name="Orders">
    <key column="CustomerID" />
    <one-to-many class="Order" />
</set>

如何使用NHibernate的ICriteria API构造一个查询来获取所有没有订单的客户的列表?使用原生SQL,我可以这样表示查询:

代码语言:javascript
复制
select * from tblCustomers c where not exists 
    (select 1 from tblOrders o where c.ID = o.CustomerID)

我一直不知道如何使用别名和DetatchedCriteria对象来做到这一点。任何指导都将不胜感激!

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2010-05-06 23:02:18

这将转换为sql...

代码语言:javascript
复制
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()来做与上面完全相同的事情。

代码语言:javascript
复制
session.CreateCriteria<Customer>()
    .Add(Restrictions.IsEmpty("Orders"))
    .List<Customer>()
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2780430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档