2017-01-04 3 views
0

Я хотел бы помочь создать этот запрос в NHibernate, используя critera API (удалены ненужные части из SQL):Nhibernate critera с подзапроса

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

Мое текущее решение использует «внутреннее соединение», но я хочу, чтобы избежать и используйте «in select», как в sql выше. «groupIds» - это список идентификаторов в C#.

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

ответ

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)); 
Смежные вопросы