【问题标题】:Nhibernate critera with subquery带有子查询的休眠标准
【发布时间】:2017-05-18 12:22:33
【问题描述】:

我想帮助在 nhibernate 中使用 critera api 创建这个查询(从 sql 中删除了不必要的部分):

SELECT this_.ID as ID120_1 FROM SS10_FOLDER this_ 
where this_.id in (select folderacce1_.resource_id from SS10_FOLDER_ACCESS folderacce1_ WHERE folderacce1_.GROUP_ID in (6174,6155));

我当前的解决方案使用“内部连接”,但我想避免它并使用上面 sql 中的“in select”。 “groupIds”是 c# 中的 id 列表。

var critiera = _session.CreateCriteria<H>();
criteria.CreateCriteria("Access", NHibernate.SqlCommand.JoinType.InnerJoin).Add(NHibernate.Criterion.Restrictions.In("Group.Id", groupIds));

【问题讨论】:

    标签: c# sql hibernate nhibernate


    【解决方案1】:

    这样解决:

    DetachedCriteria subQuery = DetachedCriteria.For<A>("Access")
                    .Add(NHibernate.Criterion.Restrictions.In("Access.Group.Id", SmartContext.Current.GetGroupIds(Session).ToList())).SetProjection(Projections.Property("Access.Resource.Id"));
    
    criteria.Add(Subqueries.PropertyIn("Id", subQuery));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多