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
は決して別のParcel
IDではありません。
からのParcel
オブジェクトは、内のオブジェクトbparcels
への返信です。彼らは常にIDです。ただし、 には、 のオブジェクトのリストだけでなく、応答するすべてのオブジェクトが含まれます。Parcel
aparcel
RecipientID
Parcel
bparcels
Parcel
Parcel
aparcel
でソートされたParcel
オブジェクトの新しいリストを作成したいと思います。aparcels
CreatedOn
ただし、Parcel
fromがfromaparcels
によって参照されている場合( via )、対応するfromをfromの後にリストに追加します。Parcel
bparcels
RecipientID
Parcel
bparcels
Parcel
aparcel
次に、「返信」を参照する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
数百/数千のオブジェクトを処理する可能性があります。