NHibernate 3 一对多查询

发布于 2024-12-05 13:43:44 字数 1323 浏览 6 评论 0原文

我有这个 nhibernate 查询

        var session = SessionFactory.GetCurrentSession();

        var users = session.QueryOver<User>()
            .Where(u => u.Enabled)
            .WhereRestrictionOn(u=>u.Orders).IsNull
            .Inner.JoinQueryOver<Foo>(a => a.Foos).Where(c => c.Enabled)
            .Inner.JoinQueryOver<Bar>(m => m.Bars).Where(m => m.Enabled)
            .TransformUsing(new DistinctRootEntityResultTransformer())
            .List();

WhereRestrictionOn Orders 不起作用

,但我试图确保这些用户的订单为零,但有 Foos 和 Bars

任何人都可以帮助在 NHibernate 中实现这一点吗?

更新:

这是迄今为止我如何改变的 - 似乎有效

        var session = SessionFactory.GetCurrentSession();
        User rawUser = null;

        var existing = QueryOver.Of<Order>().Where(x => x.UserID == rawUser.UserID).Select(x=>x.User);

        var users = session.QueryOver<User>(() => rawUser)
            .Where(u => u.Enabled)
            .WithSubquery.WhereNotExists(existing)
            .Inner.JoinQueryOver<Foo>(a => a.Foos).Where(c => c.Enabled)
            .Inner.JoinQueryOver<Bar>(m => m.Bars).Where(m => m.Enabled)
            .TransformUsing(new DistinctRootEntityResultTransformer())
            .List();

I have this nhibernate query

        var session = SessionFactory.GetCurrentSession();

        var users = session.QueryOver<User>()
            .Where(u => u.Enabled)
            .WhereRestrictionOn(u=>u.Orders).IsNull
            .Inner.JoinQueryOver<Foo>(a => a.Foos).Where(c => c.Enabled)
            .Inner.JoinQueryOver<Bar>(m => m.Bars).Where(m => m.Enabled)
            .TransformUsing(new DistinctRootEntityResultTransformer())
            .List();

WhereRestrictionOn Orders doesn't work

but I am trying to ensure these users have zero orders but have Foos and Bars

Can anyone help with a way to do it in NHibernate?

Update:

Here is how I changed this so far - seems to work

        var session = SessionFactory.GetCurrentSession();
        User rawUser = null;

        var existing = QueryOver.Of<Order>().Where(x => x.UserID == rawUser.UserID).Select(x=>x.User);

        var users = session.QueryOver<User>(() => rawUser)
            .Where(u => u.Enabled)
            .WithSubquery.WhereNotExists(existing)
            .Inner.JoinQueryOver<Foo>(a => a.Foos).Where(c => c.Enabled)
            .Inner.JoinQueryOver<Bar>(m => m.Bars).Where(m => m.Enabled)
            .TransformUsing(new DistinctRootEntityResultTransformer())
            .List();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文