基本的にツリーを形成するネストされたコメントのリストがあります。
//Non-Relevant properties (Like Body, Creator etc) excluded
internal class Comment
{
public int ID { get; set; }
public int ItemID { get; set; }
public int ParentItemID { get; set; }
public List<Comment> ChildComments { get; set; }
}
Posts
まず、データベースからリストを取得し、次にすべてを取得しますComments where ItemID == Posts[all].id
フラットリストをループして、ネストされたリストまたはツリーリストを作成したいと思います。
こんなふうになります:
の場合、ParentItemID == 0
トップレベルのコメントがあります。コメントParentItemID > 0
と照合する必要がある場合は、子コメントを親コメントリストに追加します。ParentItemID
ID
私が立ち往生しているのは、過去に再帰を使用してファイルやフォルダーをナビゲートしたことだけです。これでは、コレクションをインスタンス化して、その後の再帰を通じてそれを保持することはできません。
また、再帰の外でリストをインスタンス化し、アイテムを追加するたびにすべてのアイテムをループするのはばかげているようです。
これを行うための良い堅実なパターンがあると確信しています、私はそれを見つけることができません。