2017-01-04 79 views
0

我想幫助建立在NHibernate的使用性判據API(去除不必要的部分從SQL)這個查詢:NHibernate的性判據與子查詢

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中使用「select」。 「groupIds」是c#中的id列表。

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