Zwei Listen von Objekten - Werte zusammenführen in eine weitere Liste

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von MemoAnMichSelbst.

    Zwei Listen von Objekten - Werte zusammenführen in eine weitere Liste

    Hi,

    eine vielleicht doofe Frage...
    Ich habe zwei Listen von Objekten.
    Eine Liste von dem Objekt Rabatt mit den Attributen Kunde, Rabattgruppe, Rabatt
    Eine Liste von dem Objekt Umsatz mit den Attributen Umsatz, Kunde, Jahr und Teilegruppe.

    Teilegruppe und Rabattgruppe sind identisch.

    Nun möchte ich eine Ausgabe mit den Werten pro Kunde:
    Teilegruppe/Rabattgrumme | Rabatt | Umsatz VJ | Umsatz LJ

    aktuell erstelle ich mir drei IEnumerable

    VB.NET-Quellcode

    1. From a6 As Rabatt In Rabatte _
    2. Where a6.Kunde = KdNr And a6.Rabattgruppe = TGR _
    3. Select a6
    4. From a7 As Umsatz In Umsaetze _
    5. Where a7.Kunde = KdNr And a7.Teilegruppe = TGR And a7.Jahr = CInt(Year(Date.Now.AddYears(-1))) _
    6. Select a7
    7. From a8 As Umsatz In Umsaetze _
    8. Where a8.Kunde = KdNr And a8.Teilegruppe = TGR And a8.Jahr = CInt(Year(Date.Now)) _
    9. Select a8


    Ich lasse übergeordnet eine andere Schleife (über alle Teilegruppen) laufen und durchsuche jedesmal alle drei Filter ob die aktuelle Teilegruppe einen Rabatt oder einen Umsatz hat und gebe diese dann aus.
    Geht das nicht eleganter?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Hi,

    das Join funktioniert ja nur solange wie er das zurückschreiben kann.
    Ich erstelle mir immer ein IEnumerable von jeweils einer der Klassen... Das würde da ja nicht mehr funktionieren oder?

    So sieht das aktuell ja aus:

    VB.NET-Quellcode

    1. Dim filter6 As IEnumerable(Of Rabatt) = From a6 As Rabatt In Rabatte _
    2. Where a6.Kunde = KdNr And a6.Rabattgruppe = TGR _
    3. Select a6
    4. Dim filter7 As IEnumerable(Of Umsatz) = From a7 As Umsatz In Umsaetze _
    5. Where a7.Kunde = KdNr And a7.Teilegruppe = TGR And a7.Jahr = CInt(Year(Date.Now.AddYears(-1))) _
    6. Select a7
    7. Dim filter8 As IEnumerable(Of Umsatz) = From a8 As Umsatz In Umsaetze _
    8. Where a8.Kunde = KdNr And a8.Teilegruppe = TGR And a8.Jahr = CInt(Year(Date.Now)) _
    9. Select a8
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

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

    Ich meine so 'was in der Art:

    VB.NET-Quellcode

    1. Dim query = (From masterItem In masterEntity
    2. Join childItem In childEntity
    3. On masterItem.MasterID Equals childItem.MasterID
    4. Select masterItem.Property1, masterItem.Property2, childItem.Property1, childItem.Property2, childItem.Property3)


    Du wolltest sozusagen eine 'flache' Tabelle für alle Rabatte mit zusätzlichen Infos aus der BenutzerEntität oder habe ich falsch verstanden?
    Völlig korrekt.
    Hierbei wär noch wichtig zu wissen, was für nen Join er da macht.
    Denn ich brauche ja trotzdem den Datensatz wenn er keinen Rabatt findet oder im Vorjahr keinen Umsatz findet.
    Aber bei deinem Post...
    Was für nen Datentyp ist query?
    Ich hatte auch schon dran gedacht das mit nem Join zu verknüpfen. Aber ich muss es ja in ein Format schreiben, welches die Daten die ich selektiere auch verwalten kann.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Join entspricht INNER JOIN
    Group Join entspricht LEFT OUTER JOIN
    Mehr dazu siehe LINQ mit VB.
    query aus meinem letzten Post hat den Datentyp IEnumerable (Of <anonymer Typ>)
    Das Problem mit den nach dem Join verwaisten Datensätzen habe ich momentan keine Idee. Ich erinnere mich dunkel, irgendwann irgendwo gelesen zu haben, dass man in so einem Fall abfragt, ob die ID von einer der Entitäten Nothing (NULL) ist. Aber so genau weiß ich leider nicht mehr.
    Also ich hab da nu gebastelt... Aber irgendwie kriege ich da die Where Klausel nicht mehr richtig hin...

    VB.NET-Quellcode

    1. Dim UmsatzRabatte = From a5 In Teilegruppen
    2. Group Join a6 In Rabatte
    3. On a5.Teilegruppe Equals a6.Rabattgruppe
    4. Into RabattListe = Group
    5. Group Join a7 In Umsaetze
    6. On a5.Teilegruppe Equals a7.Teilegruppe
    7. Into UmsaetzeVJ = Group
    8. Group Join a8 In Umsaetze
    9. On a5.Teilegruppe Equals a8.Teilegruppe
    10. Into UmsaetzeLJ = Group
    11. Select a5, RabattListe, UmsaetzeVJ, UmsaetzeLJ


    Das hatte ich mir gedacht... Aber mir fehlt da was... und zwar will ich ja dass es a7 nur die Umsätze des Vorjahres und a8 nur die Umsätze des aktuellen Jahres auswirft... Und das auchnoch dann gefiltert auf die Kundennummer.
    Aber irgendwie habe ich in der Where Klausel nur Zugriff auf a5.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D