Doppelte Einträge aus Eigenschaft einer Klasse mit gesamtem Datensatz entfernen

  • WPF

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von kafffee.

    Doppelte Einträge aus Eigenschaft einer Klasse mit gesamtem Datensatz entfernen

    Hallihallo,

    ich habe eine List Of(ClassMP3Datei) mit einer Eigenschaft Dateiname und anderen Eigenschaften.

    Nun möchte ich diejenigen Datensätze aus der Liste entfernen, die in der Eigenschaft Dateiname doppelt oder öfter vorkommen. Also so, dass ich den Dateiname als "Schlüssel" verwenden kann und dieser nicht doppelt vorkommt.

    Unter WinForms funktionierte z.B. Folgendes:

    listGefundeneMusiktitel = listGefundeneMusiktitel.DistinctBy(Function(x) x.Dateiname).ToList()
    Nur wird mir das natürlich unter WPF wieder nicht angenommen... Hat jemand eine Idee?

    Grüsse aus dem Schwabenland! :)
    Hallo

    Wobei sich mir die Frage stellt warum die Liste überhaupt Doppelte Einträge aufweist?
    Warum nicht direkt beim befüllen z.b. mit .Any() prüfen obs den Eintrag bereits gibt und in diesem Fall erst garnicht in die Liste aufnehmen.

    Jedenfalls solltest du mit listGefundeneMusiktitel.GroupBy(Function(f) f.Dateiname).Select(Function(g) g.First()).ToList() auch ohne ExtensionMethod ans Ziel kommen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @ErfinderDesRades

    Hast Recht gehabt. Ich hab das hier in nem Modul gefunden:

    VB.NET-Quellcode

    1. <Runtime.CompilerServices.Extension>
    2. Public Function DistinctBy(Of T, T1 As IEquatable(Of T1))(List As IEnumerable(Of T), keySelector As Func(Of T, T1)) As IEnumerable(Of T)
    3. Return From entry In List Group By key = keySelector(entry) Into First Select First
    4. End Function


    @Nofear23m

    Ich nehme jetzt einfach das von ErfinderDesRades weil es sich bewährt hat. Never change a running System...

    Aber das mit dem .Any() klingt gut fürs nächste Mal. Wie funktioniert das genau? Hab bei Bing.de nix derartiges gefunden...

    @ISliceUrPanties
    Ja. :D Und dein Vorschlag finde ich in der Lösung von ErfinderDesRades auch... Danke.
    Naja, einfach

    VB.NET-Quellcode

    1. If listGefundeneMusiktitel.Any(Function(x) x.Dateiname = DerNeueHinzuzufügendeDateiname) Then MessageBox.Show("Es gibt bereits einen Eintrag mit diesem Dateinamen"): Return
    2. 'hier weiter im Kontext

    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.
    Ja, das von EDR ist im Grunde genau das selbe LINQ wie das von mir als Extension nur in anderer Schreibweise. Viele wege führen nach Rom.

    Aber wie gesagt, ich würde vom vornherein zusehen das es keine Doppelten einträge gibt.

    Grüße
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##