nHibernate QueryOver Подвыбрать или Присоединиться
Я пытаюсь использовать запрос, чтобы получить коллекцию сущностей на основе соединения / подзапроса, как в примере ниже:
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();
Другими словами, извлекаются все действия в таблице ресурсов, соответствующие идентификатору пользователя и ресурса.
Я бы сделал это в raw sql, либо присоединившись к Resource, либо подзапросу:
where a.ResourceId in (select resourceKey from resource where resource.memberkey = a.MemberId)
Не уверен, как поступить в nhibernate, хотя. Какие-либо предложения?
(Мы не хотим использовать отображение, так как хотим сохранить сущность Activity очень простой по соображениям производительности)
заранее спасибо
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();