Wie Sortiere ich eine Liste und deren Kinder und deren Kinder mit linq?
Habe ich eine Eltern-Kind-Beziehung, so etwas wie:
public class MyType {
public IList<MyType> Children {get;set;}
public int Order {get;set;}
}
Möchte ich wählen Sie die Liste, so dass jeder level ist in Ordnung.
Kann ich dies leicht tun für die top-level:
mylist.Children.OrderBy(x => x.Order)
Aber wie Mach ich es, für jede Gruppe von Kindern?
Das Endergebnis wäre die Liste, oder geben Sie mit all Ihren Kindern, und es Kinder (und so weiter) alle richtig sortiert Auftrag.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie tun, Rekursive, Um durch das hinzufügen einer Methode zu
MyType
wie diese:Können Sie halten die Kinder sortiert, wenn Sie eine
SortedList
als Ihre zugrunde liegenden Kinder-Kollektion. Dann können Sie setzen dieValues
- Eigenschaft, um die Werte. Drücken Sie die Elemente, die durch Ihreorder
wenn Sie der Liste hinzufügen.z.B.,
Sonst, würden Sie wahrscheinlich wollen, um die Sortierung der Listen rekursiv. Mit LINQ wäre nicht angemessen. Am besten, LINQ erlauben würde, Sie Durchlaufen die Kinder in einer sortierten Reihenfolge aber es hat nicht wirklich Sortieren der zugrunde liegenden Liste, es sei denn, Sie ersetzen Sie die list-Instanz mit der sortierten version. Wenn die zugrunde liegende Liste ist ein
Sort()
- Methode (die den generischenList<T>
hat), dann verwenden Sie diese.Beginnend mit einer sortierten Liste wäre viel einfacher, aber.
Stimme ich mit Jeff, der die einfachste Antwort ist, die Daten zu speichern sortiert, wenn das ist Ihre Haupt-access-Muster. Aber können sagen, Sie wirklich wollen, dies zu tun mit Linq:
First off, wenn Sie wusste, Sie wollte nur zwei Ebenen, die die Bestellung, die Sie tun könnten, so etwas wie dieses:
Aber was, wenn das, was Sie wirklich wollen, ist Total rekursive bestellen, die alle der Weg nach unten?
Einfach nur zu schreiben, dass macht mein Gehirn verletzt, und ich habe nicht versucht, läuft es, also viel Glück! Was es kommt darauf an, vorbei an einem linq-Ausdruck(lambda) zu sich selbst, um rekursiv anwenden, sich den Baum hinunter.
thry diese
Wenn das Ergebnis am Ende einfach eine Liste von Kindern (anstatt eine Liste von Eltern mit verschachtelten Kinder), die Sie verwenden können, eine
SelectMany