2013-06-15 9 views
5

C#でオブジェクトリストをLINQで並べ替えるには、このリストを特定の属性を持つ子リストで並べ替えたい:nhibernateに基づくクラス構造、すべての属性はpublic virtual 。子リスト属性で親オブジェクトリストを注文する

ParentobjectsList.OrderBy(x => x.ChildobjectList.Attribute); 

これをどのようにして実現できますか。

答えて

4

あなたの構造はこのような何かれるように聞こえる:この場合、それは各ParentObjectのための潜在的に多くの値があるので、単純に、ChildObject.AttributeプロパティでIEnumerable<ParentObject>を注文することも可能

class ChildObject 
{ 
    public int Attribute { get; set; } 
} 

class ParentObject 
{ 
    public IEnumerable<ChildObject> ChildobjectList { get; set; } 
} 

をしません。 Linqはどのような値を注文に使用するのかを知っていますか?何らかの集約関数を使用する必要があります。そこに多くのオプションがありますが、ここでのほんの一部です:

  • Maxの最初の項目でソートするChildobjectList
  • Firstで最小の要素でソートするChildobjectList
  • Minで最大の要素でソートしますChildobjectList
  • SumAttributeのタイプは
を加算することができると仮定すると、値の合計によってソートします10

正確にどちらを使用するかは、正確な要件によって異なります。いずれにしても、このように使用します:

var result = 
    ParentobjectsList.OrderBy(x => x.ChildobjectList.Max(c => c.Attribute)); 
+0

ありがとう、これは私を助けます – Higune

0
var sortedList = ParentobjectsList.OrderBy(x => x.ChildobjectList.Attribute); 
+0

これは私を助けません – Higune

関連する問題