In der baumartigen Datenstruktur ist die flache Liste der Knoten häufig von der verschachtelten Ebene erforderlich. Betrachten Sie beispielsweise ein "MyNode" -Objekt mit dem Attribut "Elemente", das eine Sub -Node -Sammlung enthält. Um eine flache Liste mit allen Knoten mit spezifischen Attributwerten zu erhalten, liefert Linq eine elegante Lösung.
Lösung
Um den Baum in einer LINQ -Abfrage zu verflachen und den spezifischen Attributwert zu untersuchen, befolgen Sie bitte die folgenden Schritte:
Folgendes ist eine detaillierte Erklärung:
<code class="language-csharp">// 扁平化树 IEnumerable<mynode> flatTree = e.SelectMany(c => Flatten(c.Elements)).Concat(new[] { e }); // 按属性值筛选扁平化列表 var result = flatTree.Where(n => n.group == 1);</code>
Die generische Version des benutzerdefinierten Baums
Für Bäume, die sich von "MyNode" unterscheiden, können Sie die generische Version der flachen Funktion verwenden.Beispiel verwendet
<code class="language-csharp">public static IEnumerable<mynode> Flatten(this IEnumerable<mynode> e) => e.SelectMany(c => c.Elements.Flatten()).Concat(e);</code>
Um den "MyNode" -Baum zu verflachen und den Knoten der "Gruppe" zu entsprechen, der 1: entspricht:
Durch das Verständnis des flachen Konzepts des Baumes und des starken Betriebs von LINQ können Sie Daten aus der komplexen hierarchischen Struktur effizient extrahieren und bedienen.
<code class="language-csharp">public static IEnumerable<T> Flatten<T>( this IEnumerable<T> e, Func<T, IEnumerable<T>> f ) => e.SelectMany(c => f(c).Flatten(f)).Concat(e);</code>
Das obige ist der detaillierte Inhalt vonWie kann LINQ hierarchische Daten effizient verflachten und nach einem bestimmten Eigenschaftswert filtern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!