C# 带子查询的Nhibernate准则
我想帮助使用critera api在nhibernate中创建此查询(从sql中删除不必要的部分): 我当前的解决方案使用“内部联接”,但我希望避免使用它,并使用上面sql中的“in-select”。“GroupID”是c#中的ID列表C# 带子查询的Nhibernate准则,c#,sql,hibernate,nhibernate,C#,Sql,Hibernate,Nhibernate,我想帮助使用critera api在nhibernate中创建此查询(从sql中删除不必要的部分): 我当前的解决方案使用“内部联接”,但我希望避免使用它,并使用上面sql中的“in-select”。“GroupID”是c#中的ID列表 var critiera=\u session.CreateCriteria(); CreateCriteria(“Access”,NHibernate.SqlCommand.JoinType.InnerJoin).Add(NHibernate.criteria
var critiera=\u session.CreateCriteria();
CreateCriteria(“Access”,NHibernate.SqlCommand.JoinType.InnerJoin).Add(NHibernate.criteria.Restrictions.In(“Group.Id”,groupid));
解决方法如下:
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));
DetachedCriteria子查询=DetachedCriteria.For(“访问”)
.Add(NHibernate.criteria.Restrictions.In(“Access.Group.Id”,SmartContext.Current.GetGroupIds(Session.ToList())).SetProjection(Projections.Property(“Access.Resource.Id”);
添加(subquerys.PropertyIn(“Id”,subQuery));
var critiera = _session.CreateCriteria<H>();
criteria.CreateCriteria("Access", NHibernate.SqlCommand.JoinType.InnerJoin).Add(NHibernate.Criterion.Restrictions.In("Group.Id", groupIds));
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));