3

コレクション(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>();
4

1 に答える 1

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%正しいかどうかはわかりませんが、もう少し明確になる可能性があります。(**)の間のテキストを、NoteのIDと一致するはずのSubNoteの列名に変更してください。

于 2012-08-15T17:06:16.963 に答える