2009-05-05 4 views
0

これは部分的にthisに関連しています。
Nhibernateクエリでリンクされた(HasMany)コレクションの結果を直接ソートする方法を知りたいのですが。Nhibernateクエリでリンクコレクションをソートする

ICriteria criteria = Session.CreateCriteria(typeof(PortalPage)); 
criteria.CreateAlias("PartialViews", "vc"); 
criteria.AddOrder(Order.Asc("vc.ColumnNumber")); 
criteria.Add(Property.ForName("Url").Eq(pageUrl)); 
return criteria.UniqueResult<PortalPage>(); 

ORDER BYでselectを生成しますが、リンクされたコレクションの結果は順序付けされません。

結果が返された後でコレクションを並べ替えることを避けたいのですが(linqをオブジェクトに使用するなど)これが可能ですか?

UPDATE: スティーブは問題は次のようにマッピング内の順序属性をハードコーディングすることによって解決することができます示唆したように:

HasMany(x => x.PartialViews).KeyColumnNames.Add("PageId").AsBag().SetAttribute("order-by", "ColumnNumber"); 

答えて

1

あなたはリスト型ではなく、バッグやセットとしてコレクションを指定したことがありますか?リスト・マッピング・タイプを使用し、リスト・マッピングに索引列を指定する場合は、すべての処理が必要です。

docs hereを参照してください。more info hereもありますが、2番目のものは古い投稿ですので、変更されている可能性があることに注意してください。

ことはここでは単純なリストのコレクションマッピングの例です:

<list name="Images table="Images"> 
    <key column="Id"/> 
    <index column="Position"/> 
    <element type="String" column="FileName"/> 
</list> 

この例の流暢なマッピングはこのようなものになるだろう:私は、これはハードコード」に私を強制する理解していれば、

HasMany(x => x.Images).AsList(x => x.WithColumn("Position")); 
+0

スティーブ"ソート順。 Linq2Nhibernateや他の方法で何らかの動的結果を得ることは可能ですか?あなたが流暢なnhibernateで同じマッピングをどのように表現するでしょうか? – Ronnie

+0

Ronnie、私はOrderByメソッドを使ってコレクションが返された後にソートせずに動的結果を得ることについてはわかりません。私はそれを確実に行う方法がないと思っています。それは、DDDオブジェクトモデルの子コレクションの性質によるものです。子コレクションに固有の並べ替え順序がない限り(SetやBagではなくListなど)データを取得するときに順序を指定できるように、モデリングの観点からは十分な意味を持ちます。私はリストマッピングのためにFluent構文をチェックしなければならないでしょう - 私がそれを見つけたら答えを更新します! –