を持っていますIList<Category>
カテゴリ タイプは、SQL Server のカテゴリ テーブルから取得されます。
表: カテゴリ
カテゴリ ID、親カテゴリ ID
1つのテーブルに典型的な階層があります。
したがって、ノードの関係を含むカテゴリの IList がある場合、多くの人が行っているように、これがノードとツリーの作成にどのように適合するかを理解しようとしています。そして、コンストラクターはどのように見え、このクラスは使用に関してどのように作成されるでしょうか?
ここでは、一般的な Node クラスと Tree クラスを作成して、将来他のツリー タイプで再利用できるようにするのが理にかなっていると思います。
では、このようなものがある場合、T はどのように使用され、何から恩恵を受けているのでしょうか?
(疑似コードはこちら)
public class Node<T>
...
Node<T> _parentNode;
List<Node<T>> _children;
private void SetParentNode(T)
private void AddChild(T)
... etc.
ここで、子/親の関係 (int Id) を含む Childeren などの任意の型に Generic Node クラスが使用される理由についての概念を理解しようとしています。
アップデート
したがって、ここで GroupBy の推奨事項に問題があります。あなたの例で私が何をしようとしたかをチェックしてください:
まず、Tree クラスに次のプロパティがあります。
パブリック ディクショナリ、IList>> ParentNodeAndRelatedChildrenFlattenedMap { get; プライベートセット; }
そして、クラスのコンストラクターに着信するのは、IList> に変換した (ループして、それらのすべてに対して新しいノードを作成した) IList 依存関係です。
今、あなたが話していたように、そのリストを Node.ParentId でグループ化しようとしています。これにより、親ノードでグループ化されます。各ノードには子プロパティがあるため、それらの親ノードに関連する子が何であるかを簡単に見つけることができます。
しかし、これが私のコードの後半にある問題です。
public void CreateFlattenedMap()
{
var parentGroups = _nodeDependencies.GroupBy(d => d.ParentNodeId);
var dictionary = parentGroups.ToDictionary(d => d, d => d.ToList());
ParentNodeAndRelatedChildrenFlattenedMap = dictionary;
}
それは、ToDictionary() によって作成された > 辞書であるため、私の辞書の割り当てが好きではありません。したがって、このグループ化をグループ化して , List> であるディクショナリに取得する方法がわからない場合、ディクショナリ内の Node は、グループ化している親の Node インスタンスです (はい、その Node.ParentId でグループ化していますが、 Node は最後に ToDictionary に含まれます)、List> は Parent Node.Children プロパティからの子ノードのリストです。