Sortowanie obiektu drzewo-podobnego (ParentId) Linq

0

Cześć,
mam listę obiektów klasy typu:

class Tree
{
  public int Id { get; set; }
  public int ParentId { get; set; }
  public int Level { get; set; }
  public string Field1 { get; set; }
  public string Field2 { get; set; }
}

W jaki sposób mogę posortować listę takich obiektów np. po polu Field2 z użyciem Linq w taki sposób, żeby sortowanie odbywało się wewnątrz danego poziomu (aby każdy rodzić był powiązany z posortowanymi dziećmi)? Czyli aby najpierw byli sortowani rodzice z dziećmi, następnie dzieci rodziców z dziećmi a następnie dzieci dzieci rodziców itd.
Z góry dziękuję za pomoc.

1

Dziwnie tłumaczysz, nie chodzi ci przypadkiem o GroupBy?

2

Żeby coś sortować to przydała by się lista tego czegoś. Np każdy rodzić ma listę dzieci. Wywołujesz na liście sort przekazując IComparer. W implementacji interfacu wywołujesz znowu sortowanie dzieci lewego elementu i prawego.

3

Łatwiej by było gdybyś najpierw sobie to przerobił na prawdziwe drzewo powiązanych obiektów. Chociaż jeśli to płaska lista obiektów to powinno zadziałać posortowanie po ParentId a potem po Field2

0

Dziękuję za wasze odpowiedzi i za naprowadzenie. Jeszcze nie znam dokładnej odpowiedzi jak poradzić sobie z tym problemem, ale chyba faktycznie pójdę w kierunku utworzenia zwykłego drzewa i na nim będę dokonywać sortowań/fitracji - chyba tak będzie prościej.

2
Kofcio napisał(a):

Dziękuję za wasze odpowiedzi i za naprowadzenie. Jeszcze nie znam dokładnej odpowiedzi jak poradzić sobie z tym problemem, ale chyba faktycznie pójdę w kierunku utworzenia zwykłego drzewa i na nim będę dokonywać sortowań/fitracji - chyba tak będzie prościej.

Przeczytał, nic nie zrozumiał, podziękował, zrobił bezsensowny wniosek!
Czyli prawdziwy Cesar: - Veni, Vidi, Vici!

            Tree[] tree=...
            Tree[] sortedTree=tree.OrderBy(t => t.ParentId).ThenBy(t => t.Field2).ToArray();

https://wandbox.org/permlink/LzMwfHVD6idklhCj

0

@_13th_Dragon Dziękuję Ci bardzo za pomoc, chociaż mogłoby się obejść bez tej uszczypliwości :)
To nie jest tak, że od razu się poddałem. Uznałem, że nie zawsze będę miał możliwość posiadania informacji o levelu, dlatego postanowiłem spróbować zrobić posortowane drzewko bazując tylko na Id i ParentId - i stosując samo Linq to mnie przerosło, dlatego uznałem, ze bardziej uniwersalnie będzie zrobić strukturę drzewa i sortować każdy poziom niezależnie.
Ale jeszcze raz bardzo dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1