Объединение с повторным запросом в nhibernate

#c# #nhibernate #queryover

#c# #nhibernate #повторный запрос

Вопрос:

Я безуспешно пытаюсь создать запрос с помощью QueryOver в NHibernate. Результирующий SQL, который мне нужно получить, следующий:

 select mn.Story_ID from Membership_Updates mn
join Updates upd on mn.Story_ID = upd.Story_ID
where mn.MembershipUser_ID = 1
group by mn.Story_ID having MAX(mn.DismissTime) <= MAX(upd.CreationDate)
  

Мои классы:

 public class MembershipUpdates
{
  public MembershipUpdates()
  {
    DismissTime = DateTime.Now;
  }

  public virtual int Id  { get; set; }
  public virtual MembershipUser User { get; set; }
  public virtual Story Story { get; set; }
  public virtual DateTime DismissTime { get; set; }
}

public class Updates 
{
  public Updates()
  {
    CreationDate = DateTime.Now;
  }

  public virtual int Id  { get; set; }
  public virtual DateTime CreationDate { get; private set; }
  public virtual Story Story { get; set; }
  public virtual string Message{ get; set; }
}
  

Возможно, я упускаю что-то очевидное

Ответ №1:

Возможно, я ошибаюсь, но я не думаю, что QueryOver позволяет вам присоединяться к несвязанным объектам (то есть, не прибегая к подзапросам).

Я бы использовал HQL для этого:

 select mn.Story
from MembershipUpdates mn, Updates upd
where upd.Story = upd.Story
and mn.User.id = 1
group by mn.Story
having MAX(mn.DismissTime) <= MAX(upd.CreationDate)
  

Примечание: имя вашего класса объектов должно быть в единственном числе.

Комментарии:

1. Спасибо. Я этого боялся. Тогда будет HQL 🙂