7

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

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

どうすればこれを達成できますか。

4

1 に答える 1

5

あなたの構造は次のようなものです:

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

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

この場合、各 には多くの値が存在する可能性があるため、単純IEnumerable<ParentObject>に をプロパティで並べ替えることはできません。Linq は、順序付けに使用する値をどのように知るのでしょうか? 何らかの集計関数を使用する必要があります。多くのオプションがありますが、ここではほんの一部を示します。ChildObject.AttributeParentObject

  • Max最大の要素でソートするChildobjectList
  • Minの最小要素でソートするChildobjectList
  • Firstの最初の項目で並べ替えるChildobjectList
  • SumAttributeの型が合計できると仮定して、値の合計でソートする

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

var result = 
    ParentobjectsList.OrderBy(x => x.ChildobjectList.Max(c => c.Attribute));
于 2013-06-15T16:14:24.857 に答える