我有一个带有子导航Show
的{{1}}实体。使用IList<TicketRequest>
,我想选择所有设置了Active标记的QueryOver
个实体,并选择Show
s将来播出并且有相关Show
实体的实体。一个有效的SQL查询是:
TicketRequest
我无法弄清楚如何使用QueryOver来完成这项工作。我可以到达那里:
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))
基本上产生SQL:
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();
任何人都可以知道如何一路走下去并包含额外的WHERE条件吗?任何帮助将不胜感激。
答案 0 :(得分: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();