【问题标题】:nHibernate QueryOver Subselect or JoinnHibernate QueryOver 子选择或连接
【发布时间】:2012-01-18 12:18:26
【问题描述】:

我正在尝试使用查询来检索基于连接/子查询的实体集合,如下例所示:

var types = new List<ActivityType>{ActivityType.CommentMedia, ActivityType.KeepMedia};

return _sessionFactory.GetCurrentSession()
                .QueryOver<Activity>()
                .Where(a.Type.IsIn(types))
                .WithSubquery.WhereExists(QueryOver.Of<Resource>()
                    .Where(k => k.MemberKey == userId)
                    .Where(k => k.ResourceKey == activity.ResourceId)
                    )
                .Take(take)
                .List();

换句话说,检索资源表中与用户和资源 ID 匹配的所有活动。

我会通过加入 Resource 或子查询在原始 sql 中执行此操作:

where a.ResourceId in (select resourceKey from resource where resource.memberkey = a.MemberId)

不知道如何在 nhibernate 中进行。有什么建议吗?

(我们不想使用映射,因为出于性能原因,我们希望保持 Activity 实体非常简单)

提前致谢

【问题讨论】:

  • 是否需要为此使用QueryOver,或者HQL也是一种选择?
  • Query Over 会更好。在我看来,它应该是直截了当的。干杯

标签: nhibernate queryover


【解决方案1】:
Activity activity = null;
return _sessionFactory.GetCurrentSession()
            .QueryOver(() => activity)
            .Where(a.Type.IsIn(types))
            .WithSubquery.WhereProperty(a => a.ResourceId).In(QueryOver.Of<Resource>()
                .Where(k => k.MemberKey == userId)
                .Where(k => k.ResourceKey == activity.ResourceId)
                )
            .Take(take)
            .List();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多