1

次のプロパティを持つエンティティがあるとします。

public class Foo    
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? ParentId { get; set; }
}

子は、null 以外の ParentId を持つ任意の Foo です。親子関係にはいくつかのレベルがあり、この時点では最大 5 つです。

Foo から始めて、そのすべての子、その子の子、およびその子の子の子などを取得するための簡単な LINQ の方法または一般的な方法論はありますか?

現在、最初の親の各子をループしてから、もう一度ループしてその子のすべての子を取得するなどしています。これは面倒で、私が望むことを達成する正しい方法ではないようです。

4

2 に答える 2

1

階層内の場所を表す文字列プロパティを維持することを好みます。たとえば、値が「/99/42」の場合、アイテムが 99 に属する親 42 に属していることがわかります。これが優れている理由は、Foos のコレクション全体を平坦化し、そのフィールドをクエリするだけでよいからです。 「/99」で始まるもので、階層のブランチ全体を取得します。したがって、クラスは次のようになります。

public class Foo    
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Path { get; set; } //eg: /99/42
}

それが役立つことを願っています。

于 2013-07-11T16:52:43.753 に答える