NHibernate:基于列获取不同的结果,但检索所有列
我有一个包含GLCode的表GL。我需要得到一个唯一的GLCODE列表,但要得到所有其他列。下面的SQL生成我想要的结果NHibernate:基于列获取不同的结果,但检索所有列,nhibernate,distinct,Nhibernate,Distinct,我有一个包含GLCode的表GL。我需要得到一个唯一的GLCODE列表,但要得到所有其他列。下面的SQL生成我想要的结果 select * from GL where GLId in (select Min(GLId) from GL group by GLCode ) 有没有一种方法可以使用Criteria API实现这一点 这是我最好的尝试: var subQuery = DetachedCriteria.For<GL>(); subQuery
select * from GL where GLId in (select Min(GLId) from GL group by GLCode )
有没有一种方法可以使用Criteria API实现这一点
这是我最好的尝试:
var subQuery = DetachedCriteria.For<GL>();
subQuery
.SetProjection(Projections.Property("GLCode"))
.SetResultTransformer(new DistinctRootEntityResultTransformer());
return (List<GL>)currentSession
.CreateCriteria(typeof(GL))
.Add(Subqueries.PropertyIn("GLCode", subQuery))
.List<GL>();
var subQuery=DetachedCriteria.For();
子查询
.SetProjection(Projections.Property(“GLCode”))
.SetResultTransformer(新DistincTrotentyResultTransformer());
返回(列表)当前会话
.CreateCriteria(类型(GL))
.Add(subquerys.PropertyIn(“GLCode”,subQuery))
.List();
即使NHibernate无法从子查询的结果列中排除GLCode,仍然可以创建执行此任务的查询。使用相关的EXISTS子查询而不是IN。我们所追求的SQL是这样的:
select query.*
from GL query
where exists (
select
min(subquery.GLId) AS GLId,
subquery.GLCode
from GL subquery
group by subquery.GLCode
having min(subquery.GLId) = query.GLId);
以下是NHibernate查询:
var min = Projections.Min("GLId");
var subquery = DetachedCriteria.For<GL>("subquery")
.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty("GLCode"), "GLCode")
.Add(min, "GLId"))
.Add(Restrictions.EqProperty(min, "query.GLId"));
return session.CreateCriteria<GL>("query")
.Add(Subqueries.Exists(subquery))
.List<GL>();
var min=projects.min(“GLId”);
var subquery=DetachedCriteria.For(“子查询”)
.SetProjection(Projections.ProjectionList()项目)
.Add(Projections.GroupProperty(“GLCode”),“GLCode”)
.Add(最小,“GLId”))
.Add(Restrictions.EqProperty(min,“query.GLId”);
返回会话.CreateCriteria(“查询”)
.Add(子查询.Exists(子查询))
.List();
我也面临同样的问题。有什么帮助吗?非常喜欢nhibernate答案之前的sql示例。