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();
Другие вопросы по тегам