2012-01-18 3 views
1

Я пытаюсь использовать запрос через, чтобы получить коллекцию объектов на основе присоединения/подзапроса согласно примере ниже: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(); 

Другими словами извлекать все виды деятельности, которые в таблица ресурсов, соответствующая идентификатору пользователя и ресурса.

Я хотел бы сделать это в сыром SQL либо присоединение к ресурсу, или подзапроса:

where a.ResourceId in (select resourceKey from resource where resource.memberkey = a.MemberId) 

Не уверен, как поступить в NHibernate, хотя. Какие-либо предложения?

(Мы не хотим использовать отображение, как мы хотим сохранить объект активность очень просто по соображениям производительности)

Заранее спасибо

+0

ли это необходимо использовать QueryOver для этого , или HQL также вариант? –

+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(); 
Смежные вопросы