nHibernate QueryOver Подвыбрать или Присоединиться - PullRequest
1 голос
/ 18 января 2012

Я пытаюсь использовать запрос поверх, чтобы получить коллекцию сущностей на основе соединения / подзапроса, как показано в следующем примере:

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 Ответ

3 голосов
/ 19 января 2012
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();
...