C# のオブジェクト リストを LINQ で並べ替えたい、このリストを特定の属性を持つ子リストで並べ替えたい: クラス構造は nhibernate に基づいており、すべての属性は public virtual です。
ParentobjectsList.OrderBy(x => x.ChildobjectList.Attribute);
どうすればこれを達成できますか。
C# のオブジェクト リストを LINQ で並べ替えたい、このリストを特定の属性を持つ子リストで並べ替えたい: クラス構造は nhibernate に基づいており、すべての属性は public virtual です。
ParentobjectsList.OrderBy(x => x.ChildobjectList.Attribute);
どうすればこれを達成できますか。
あなたの構造は次のようなものです:
class ChildObject
{
public int Attribute { get; set; }
}
class ParentObject
{
public IEnumerable<ChildObject> ChildobjectList { get; set; }
}
この場合、各 には多くの値が存在する可能性があるため、単純IEnumerable<ParentObject>
に をプロパティで並べ替えることはできません。Linq は、順序付けに使用する値をどのように知るのでしょうか? 何らかの集計関数を使用する必要があります。多くのオプションがありますが、ここではほんの一部を示します。ChildObject.Attribute
ParentObject
Max
最大の要素でソートするChildobjectList
Min
の最小要素でソートするChildobjectList
First
の最初の項目で並べ替えるChildobjectList
Sum
Attribute
の型が合計できると仮定して、値の合計でソートするどちらを使用するかは、正確な要件によって異なります。いずれにしても、次のように使用します。
var result =
ParentobjectsList.OrderBy(x => x.ChildobjectList.Max(c => c.Attribute));