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条件?任何帮助,将不胜感激.
有点冗长,但应该做
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)
| 归档时间: |
|
| 查看次数: |
6848 次 |
| 最近记录: |