NHibernate使用QueryOver:WHERE和EXISTS

ron*_*y97 4 .net nhibernate queryover

我有一个Show带有儿童导航的实体IList<TicketRequest>.使用QueryOver,我想选择所有Show设置了Active标志的实体,并选择Shows将来的空气并具有关联的TicketRequest实体.一个有效的SQL查询是:

select s.*
from Show s
where s.Active = 1 or
    (s.ShowDate > getdate() and exists(
     select 1
     from TicketRequest tr
     where tr.Show_id = s.Id))
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何使用QueryOver使这项工作.我可以到达那里:

Show showAlias = null;

var existing = QueryOver.Of<TicketRequest>()
        .Where(r => r.Show.Id == showAlias.Id)
        .Select(r => r.Show);

var results = Session.QueryOver<Show>(() => showAlias)
        .Where(s => s.ShowDate > DateTime.Now)
        .WithSubquery.WhereExists(existing)
        .List();
Run Code Online (Sandbox Code Playgroud)

它本质上产生SQL:

select s.*
from Show s
where s.ShowDate > getdate() and exists(
     select 1
     from TicketRequest tr
     where tr.Show_id = s.Id)
Run Code Online (Sandbox Code Playgroud)

任何人都可以弄清楚如何一路走下去并包含额外的WHERE条件?任何帮助,将不胜感激.

Fir*_*iro 6

有点冗长,但应该做

var results = session.QueryOver<User>(() => showAlias)
    .Where(Restrictions.Or(
        Restrictions.Where<Show>(s => s.Active),
        Restrictions.And(
            Restrictions.Where<Show>(s => s.ShowDate > DateTime.Now),
            Subqueries.WhereExists(existing))))
    .List();
Run Code Online (Sandbox Code Playgroud)