[英]NHibernate - Order by Max() of Collection property in Detached Criteria
我试图通过其集合的属性(NHibernate 3.2.0)的聚合来命令查询。
这是样本:
CurrentSession.CreateCriteria<Note>()
.Add(Subqueries.PropertyIn("Id",
DetachedCriteria.For<SubNote>()
.SetProjection(Projections.ProjectionList()
.Add(Projections.Alias(Projections.Max("Date"), "maxDate")))
.AddOrder(Order.Desc("maxDate")))
.List<Note>();
这不起作用,它说“注意”中没有属性“maxDate”
我想要的是按其收集的SubNote的最大日期订购Note。
谢谢!
解
var subQuery = DetachedCriteria
.For<SubNote>("sn")
.SetProjection(
Projections.Alias(Projections.Max("Date"), "maxDate"))
.Add(Restrictions.EqProperty("Note.Id", "n.Id"));
var results = CurrentSession.CreateCriteria<Note>("n")
.AddOrder(Order.Desc(Projections.SubQuery(subQuery)))
.List<Note>();
尝试这个:
var subQuery = DetachedCriteria
.For<SubNote>("sn")
.SetProjection(
Projections.Alias(Projections.Max("Date"), "maxDate"))
.Add(Restrictions.EqProperty("**sn.COLUMNNAME**", "n.Id"));
var results = CurrentSession.CreateCriteria<Note>("n")
.Add(Subqueries.Select(subQuery))
.SetProjection(
Projections.Alias("n.Id", "Id"))
.AddOrder(Order.Desc("maxDate")))
.List<Note>();
不确定它是否100%正确但它可能会让事情变得更加清晰。 确保在SubNote中更改(**)与列名称之间的文本,该文本应与Note中的Id匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.