Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NHibernate:基于列获取不同的结果,但检索所有列_Nhibernate_Distinct - Fatal编程技术网

NHibernate:基于列获取不同的结果,但检索所有列

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

我有一个包含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
            .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示例。