私のオブジェクトは、次のようなものになります。アイテムの親子関係に従って階層的にリストを並べ替えるにはどうすればよいですか?
public class Transaction
{
long Id;
long Amount;
DateTime Date;
string ReferenceNumber;
string ParentReferenceNumber;
}
それはすでにDate
によって並べ替えに来ているが、しかし、私は何をする必要があることは、これらのトランザクションのリストを配置しているので、それらの他の上ReferenceNumber
に一致するParentReferenceNumber
を持ちますTransaction
は、「親と子」の順に表示されます。
これは私が試みたものです。 「コレクションが変更されたため、列挙操作が実行されない可能性があります」というエラーが生成されます。それは私が恐れていたことなので、疑問です。
foreach (var p in Model.PaymentInfo)
{
var child = Model.PaymentInfo.SingleOrDefault(x => x.ParentReferenceNumber == p.ReferenceNumber);
if (child != null)
{
var parentIndex = Model.PaymentInfo.IndexOf(p);
var childIndex = Model.PaymentInfo.IndexOf(child);
Model.PaymentInfo.RemoveAt(childIndex);
Model.PaymentInfo.Insert(parentIndex + 1, child);
}
}
あなたがそれをループしているときには、コレクションからアイテムを削除することはできません。しかし、これをもう一度見て、あなたはそれを考えていません。選択したグループにグループを追加し、グループバイに注文してください。そうすれば、余分なコードを必要とせずに望むものが得られます。 –