我有一个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 …Run Code Online (Sandbox Code Playgroud)