首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate with IQueryOver - create where-condition subquery and or condition

NHibernate with IQueryOver - create where-condition subquery and or condition
EN

Stack Overflow用户
提问于 2012-07-03 20:24:32
回答 1查看 1.3K关注 0票数 1

当我这样做的时候

代码语言:javascript
复制
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:

代码语言:javascript
复制
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将生成FlowingSQL语句:

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-03 20:35:10

未经过测试,但像tihs这样的代码可能会起作用

代码语言:javascript
复制
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();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11310858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档