LinqToDataSet - GetAllChildRows

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    LinqToDataSet - GetAllChildRows

    Mir liegt ein typisiertes Dataset vor, das unter Anderem eine Tabelle MeinFirmen enthält, mit der über eine Relation die Tabelle MeineMitarbeiter verbunden ist,

    Wegen der Typisierung gibt es ja nun für jede MeineFirmenRow die schöne Funktion MeineFirmenRow.GetMeineMitarbeiterRows.

    Ich suche nun die Lösung, mit einem LinqToDataset-Ausdruck ALLE Mitarbeiter ALLER Firmen darzustellen, sowas wie:

    VB.NET-Quellcode

    1. Dim AlleMitarbeiter As MeineMitarbeiterRow() = MeineFirmen.Select(Function(row) row.GetMeineMitarbeiterRows.Select ...)


    Wie kann so ein Ausdruck aufgebaut sein?
    Vielleicht reicht Dir das ja:

    VB.NET-Quellcode

    1. Dim AlleMitarbeiter = DirectCast(WirtschaftsDataSet.MeineFirmen.Select(), WirtschaftsDataSet.MeineFirmenRow()).Select(Function(s) s.GetMitarbeiterRows).ToArray


    Dann kämen zumindest mal alle MA raus. Zwar als Array von Arrays, aber die Weiterverarbeitung sollte kein Problem sein, notfalls mit ner programminternen Extension, welches die Einträge der einzelnen Felder zusammenführt:

    VB.NET-Quellcode

    1. Friend Module Ex
    2. <Runtime.CompilerServices.Extension>
    3. Friend Function ToOneArray(Of T)(Field As T()()) As T()
    4. Dim OutputField As New List(Of T)
    5. For Each a In Field
    6. For Each b In a
    7. OutputField.Add(b)
    8. Next
    9. Next
    10. Return OutputField.ToArray
    11. End Function
    12. End Module


    ->

    VB.NET-Quellcode

    1. Dim AlleMitarbeiter = DirectCast(WirtschaftsDataSet.MeineFirmen.Select(), WirtschaftsDataSet.MeineFirmenRow()).Select(Function(s) s.GetMitarbeiterRows).ToArray.ToOneArray

    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.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Kopfschmerz, lass nach ... Ja, Du hast natürlich recht.
    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.
    @VB1963, @VaporiZed
    ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;(
    Oh Mann, war gestern wohl schon spät ... Ihr habt natürlich Recht.
    Trotzdem würde mich eine LinqToDatset-Lösung grundsätzlich interessieren, mit der man ein solches Konstrukt "flatten" kann.
    @VaporiZed
    Deine skizzierte Lösung funktioniert natürlich, aber m.E. müsste das doch auch nur mit LinqToDataset gehen ...

    Das ist dann von Interesse, wenn nicht alle Datensätze aus MeineFirmen berücksicht sind, sondern eine gefilterte Auswahl von Firmen. Und wenn ich dann nur die den gefilterten Datensätzen zugehörigen Mitarbeiter selektieren möchte. Noch interessanter wird es dann, wenn z.B. zwischen Firma und Mitarbeiter noch eine Niederlassungs- und zusätzlich Fialalstruktur eingefügt ist ...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „us4711“ ()

    @ErfinderDesRades
    Danke, das ist genau das, was ich suchte.
    Gibt's eigentlich irgendwo eine Dokumentation, die mal die ganzem LinqTodataset-Methoden auflistet, damit mal Zusammenhänge klarwerden?
    Der Objektbrowser reicht mir da nicht wirklich.