2012-07-03 4 views
1

Когда я делаюNHibernate с IQueryOver - создать где-состояние с подзапроса и или условие

Acc accountAlias = null; 
var subQuery = QueryOver.Of<Temp>() 
       .Where(x=>x.IsAccepted==null) 
       .And(x=>x.Account.Id==accountAlias.Id); 

var results = session.QueryOver<Acc>(()=>accountAlias) 
       .Where(x=>x.User.Id==65) 
       .WithSubquery.WhereExists(subQuery); 

это создаст благородные предшественники SQL:

select * 
from Accounts a 
where a.User_Id=65 
and exists (
    select t.Account_Id 
    from Temporary_Accounts t 
    where t.IsAccepted is null and t.Account_Id=a.Account_Id) 

Как я могу добавить или условие, что NHibernate будет генерировать благородные предшественники SQL:

select * 
from Accounts a 
where a.User_Id=65 
and (a.Amount = 100 or exists (
    select t.Account_Id 
    from Temporary_Accounts t 
    where t.IsAccepted is null and t.Account_Id=a.Account_Id)) 

ответ

3

Не тестировался, но что-то вроде tihs может сделать трюк

Acc accountAlias = null; 
var subQuery = QueryOver.Of<Temp>() 
       .Where(x => x.IsAccepted == null) 
       .And(x => x.Account.Id == accountAlias.Id); 

var results = session.QueryOver<Acc>(()=>accountAlias) 
        .Where(Restrictions.Disjunction() 
        .Add(Subqueries.WhereExists(subQuery)) 
        .Add(x => x.Amount == 100)) 
        .And(x => x.User.Id = 65) 
        .List(); 

 Смежные вопросы

  • Нет связанных вопросов^_^