Verwenden Sie die Linq Flat -Shaped -Baumstruktur und Filter gemäß dem Attribut
Auf dem Gebiet der Baumdaten ist es häufig erforderlich, die hierarchische Struktur in eine flache Liste umzuwandeln. Angenommen, Sie haben einen geschichteten Klassenmode mit den Attributen für übergeordnete und Elemente und möchten die Bäume abflachen, indem Sie alle MyNode -Instanzen in einer einzigen Liste extrahieren. Insbesondere sind Sie nur daran interessiert, Knoten zu erhalten, die in der Gruppe gleich 1 sind.
Die folgende Linq -Abfrage bietet Ihnen eine Lösung:
<code class="language-c#">var flatList = rootNodes.SelectMany(node => Flatten(node.Elements)).Concat(rootNodes).Where(node => node.group == 1);</code>
Nach dem Login kopieren
Folgendes ist das Arbeitsprinzip:
selectMany (node = & gt; flacher (node.elements)) - : Diese Methode hat die Sammlung der Elemente jedes MyNode rekursiv abgeflacht, um die flache Liste aller Nachkommen zu erhalten.
concat (rootNodes)
: Verbinden Sie die flache Liste der Nachkommen mit der ursprünglichen Mynodes -Liste. -
wobei (node = & gt; node.group == 1) : Filter die flache Liste, die nur Knoten mit einem Gruppenattribut 1 enthält.
-
Um die Lesbarkeit des Codes zu verbessern, sollten Sie die Erweiterungsmethode zum Abflachen verwenden:
Verwenden Sie dann Ihre Baumanrufe -Erweiterungsmethode und geben Sie an, wie Sie Nachkommen abrufen:
<code class="language-c#">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>
Nach dem Login kopieren
Genießen Sie die Vorteile, die durch die Verwendung von LINQ -Flachebenendaten mitgebracht werden!
Das obige ist der detaillierte Inhalt vonWie kann ich eine Baumstruktur und einen Filter mit einer Eigenschaft mit LINQ filtern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!