nHibernate QueryOver Subselect或Join

时间:2012-01-18 12:18:26

标签: nhibernate queryover

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

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实体非常简单)

提前致谢

1 个答案:

答案 0 :(得分:3)

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();