Frage zur Sortierung von Klassenlisten

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Pinot.

    Frage zur Sortierung von Klassenlisten

    Hallo zusammen,
    ich weiß nicht, wonach ich suchen muss, deshalb die Frage im Forum.

    Ich habe eine Klasse1, die eine Liste einer anderen Klasse2 enthällt. (List of t)
    sagen wir Klasse 1 ist AdressListe, Klasse2 ist die Adresse mit Name, Nachname und 10 weiteren Properties


    Will ich diese Liste sortieren, so kann ich das mit z.B.
    Dim sortListe= From A in AdressListe order by A.Name
    soweit, so gut

    Will ich nach einer anderen Property sortieren, so kann ich entsprechend A.Nachname schreiben.
    Wie kann man diese Abfrage variabel gestallten?
    In etwa so hatte ich mir das gedacht:

    Dim sortListe= From A in AdressListe order by sortObj

    ich habe versucht über gettype der Klasse2, bzw getproperties etwas über den Typ herauszufinden, damit ein Objekt zu erstellen und dieses dann einzusetzten.
    Das Programm stürzt zwar nicht ab, macht aber auch nicht was ich möchte.

    Ich hoffe, ich habe mich nicht allzu unverständlich ausgedrückt.
    Vielen Dank im Voraus.

    ~blaze~: Thema verschoben

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

    Probier dieses:

    VB.NET-Quellcode

    1. Private Sub test()
    2. Dim sortListe = From A In AdressListe Order By A.Name ' Linq-Schreibweise
    3. sortListe = AdressListe.OrderBy(Function(A) A.Name) ' dasselbe in Extension-Schreibweise
    4. Dim sortObj = Function(A As Address) A.Name ' ein sortObj
    5. sortListe = AdressListe.OrderBy(sortObj)
    6. sortObj = Function(A As Address) A.NachName ' ein anderes
    7. sortListe = AdressListe.OrderBy(sortObj)
    8. End Sub
    verstanden?
    Der Code klappt soweit super, ist aber nicht ganz, was ich suche.
    Um bei dem Beispiel zu bleiben, möchte ich die Information, um welche property es sich handelt per string übergeben

    also etwas so
    Dim StringVar as string="Nachname"

    Dim sortObj = Function(A As Address) A.(StringVar) 'so wird es nicht klappen
    1. CodeTags nicht vergessen.
    2. Ich hoffe, ich hab verstanden, was Du meinst.
    Mit GetProperty und GetValue geht es:

    VB.NET-Quellcode

    1. Dim SortedList = AdressListe.OrderBy(Function(x) x.GetType.GetProperty(NameOfPropertyToOrderBy).GetValue(x)).ToList

    Wobei NameOfPropertyToOrderBy ein an die Zeile übergebender String ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo VaporiZed,
    genau das wollte ich!
    Wenn ich deinen Code ausprobiere, erwartet VB noch eine Angabe beim getvalue bzw
    gibt mir die Fehlermeldung : Fehler bei Überladungsauflösung, da keine zugreifbare "Getvalue" diese Anzahl von Argumenten akzeptiert.

    Jetzt habe ich noch ein Nothing hinter das x gepackt, jetzt läuft es.

    Noch einmal herzlichen Dank an Euch beide, ErfinderdesRades und Dich, für die schnelle und gute Hilfe.
    Schönes WE