NHibernate ICriteria-按子集合计数排序?
下面是一个简单的示例场景- “标签”有很多“问题”。当我得到标签列表时,如何使用CriteriaAPI按标签问题计数排序 我以前做过这件事,但大约4个月没有接触过NH,我已经忘记了。。。也许吧?救命啊 谢谢试试: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>();
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();
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();