【问题标题】:NHibernate - Order by Max() of Collection property in Detached CriteriaNHibernate - 按分离标准中 Collection 属性的 Max() 排序
【发布时间】:2012-08-11 17:40:03
【问题描述】:

我正在尝试通过聚合其集合的属性(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>();

这不起作用,它说“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>();

【问题讨论】:

    标签: c# nhibernate criteria


    【解决方案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 匹配的列名。

    【讨论】:

    • 不得不做一些调整,但你让我走上了正确的道路,谢谢。
    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多