NHibernate ICriteria-按子集合计数排序?

NHibernate ICriteria-按子集合计数排序?,nhibernate,parent-child,Nhibernate,Parent Child,下面是一个简单的示例场景- “标签”有很多“问题”。当我得到标签列表时,如何使用CriteriaAPI按标签问题计数排序 我以前做过这件事,但大约4个月没有接触过NH,我已经忘记了。。。也许吧?救命啊 谢谢试试: var tags = Session.CreateCriteria(typeof(Tag)) .AddOrder(Order.Asc("Tag.Question.Id") .List<Tag>();

下面是一个简单的示例场景-

“标签”有很多“问题”。当我得到标签列表时,如何使用CriteriaAPI按标签问题计数排序

我以前做过这件事,但大约4个月没有接触过NH,我已经忘记了。。。也许吧?救命啊

谢谢

试试:

var tags = Session.CreateCriteria(typeof(Tag))
                  .AddOrder(Order.Asc("Tag.Question.Id")
                  .List<Tag>();

// If that does not work, try:
var tags = Session.CreateCriteria(typeof(Tag))
                  .CreateCriteria("Question", "TagQuestion", JoinType.InnerJoin)
                  .AddOrder(Order.Asc("TagQuestion.Id")
                  .List<Tag>();
var tags=Session.CreateCriteria(typeof(Tag))
.AddOrder(Order.Asc(“Tag.Question.Id”)
.List();
//如果不起作用,请尝试:
var tags=Session.CreateCriteria(typeof(Tag))
.CreateCriteria(“问题”、“标记问题”、JoinType.InnerJoin)
.AddOrder(Order.Asc(“TagQuestion.Id”)
.List();
  • 编辑:除非您决定反对它,或者您已经熟悉了Criteria API,否则您应该查看

    var tags = Session.Linq<Tag>()
                   .OrderBy(tag => tag.Question.Id)
                   .ToList();
    
    var tags=Session.Linq()
    .OrderBy(tag=>tag.Question.Id)
    .ToList();
    

    坐下来,用一双崭新的眼睛看清楚了……标签现在是按标签问题集合(视图)上的属性排序的……这在我的领域比按孩子数排序更有意义

        public IList<Tag> GetTop(int numberOfTags)
        {
            using (ITransaction transaction = Session.BeginTransaction())
            {
    
                DetachedCriteria detachedCriteria = DetachedCriteria.For<Tag>()
                        .CreateCriteria<Tag>(x => x.Questions)
                        .AddOrder<Question>(x => x.Views, Order.Desc)
                        .SetMaxResults(numberOfTags)
                        .SetProjection(Projections.Distinct(Projections.Id()));
    
                IList<Tag> tags = Session.CreateCriteria<Tag>()
                    .SetFetchMode<Tag>(x => x.Questions,FetchMode.Join)
                    .Add(LambdaSubquery.Property<Tag>(x => x.Id).In(detachedCriteria))
                    .SetResultTransformer(new DistinctRootEntityResultTransformer())
                    .List<Tag>();
    
                transaction.Commit();
                return tags;
            }
        }
    
    public IList GetTop(int numberOfTags)
    {
    使用(ITransaction transaction=Session.BeginTransaction())
    {
    DetachedCriteria DetachedCriteria=DetachedCriteria.For()
    .CreateCriteria(x=>x.问题)
    .AddOrder(x=>x.Views,Order.Desc)
    .SetMaxResults(numberOfTags)
    .SetProjection(projects.Distinct(projects.Id());
    IList tags=Session.CreateCriteria()
    .SetFetchMode(x=>x.Questions,FetchMode.Join)
    .Add(LambdaSubquery.Property(x=>x.Id).In(detachedCriteria))
    .SetResultTransformer(新DistincTrotentyResultTransformer())
    .List();
    Commit();
    返回标签;
    }
    }
    
    与我所追求的不完全一样:-(可能会失败)Session.Linq().OrderBy(tag=>tag.Questions.Count).ToList();