List同じタイプのものを 2 つ持っていParcelます。
public class Parcel
{
int Id {get;set;}
int RecipientID {get;set;}
DateTime CreatedOn {get;set;}
}
List<Parcel> aparcels = postFacade.GetParcels()
.OrderByDescending(x => x.CreatedOn);
List<Parcel> bparcels = postFacade.GetReplyParcels();
からのParcelオブジェクトaparcelsはトップレベルのアイテムです。彼らRecipientIDは決して別のParcelIDではありません。
からのParcelオブジェクトは、内のオブジェクトbparcelsへの返信です。彼らは常にIDです。ただし、 には、 のオブジェクトのリストだけでなく、応答するすべてのオブジェクトが含まれます。ParcelaparcelRecipientIDParcelbparcelsParcelParcelaparcel
でソートされたParcelオブジェクトの新しいリストを作成したいと思います。aparcelsCreatedOn
ただし、Parcelfromがfromaparcelsによって参照されている場合( via )、対応するfromをfromの後にリストに追加します。ParcelbparcelsRecipientIDParcelbparcelsParcelaparcel
次に、「返信」を参照するbparcels他のParcelオブジェクトをチェックParcelしてリストに追加し、 「返信」オブジェクトが見つからbparcelsなくなるまで再帰的にチェックします。Parcel
これは私が思いついたものです:
List<Parcel> parcels = new List<Parcels>();
var replies = bposts.ToDictionary(u => u.RecipientID, p => p.Id);
foreach (var p in aparcels)
{
parcels.Add(p);
int commid = p.Id;
int val;
while (replies.TryGetValue(commid, out val))
{
parcels.Add(parcelFacade.GetById(val));
commid = val;
}
}
この操作のパフォーマンスを向上させる方法はありますか? Parcel数百/数千のオブジェクトを処理する可能性があります。