NHibernate - 按分离标准中的Collection属性的Max()顺序排序

时间:2012-08-15 12:15:18

标签: c# nhibernate 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>();

1 个答案:

答案 0 :(得分:1)

试试这个:

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匹配。