带有子查询的Nhibernate critera

时间:2017-01-04 09:08:32

标签: c# sql hibernate nhibernate

我想帮助使用critera api在nhibernate中创建此查询(从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));

1 个答案:

答案 0 :(得分:0)

解决这个问题:

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));