我正在尝试使用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实体非常简单)
提前致谢
答案 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();