Group by(Datum) und Sum(Zeiten) auf typisiertes Dataset angwenden.

  • VB.NET

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

    Group by(Datum) und Sum(Zeiten) auf typisiertes Dataset angwenden.

    Hallo!

    Ich haben einen typisiertes DS mit einem Table. Die Tabelle besteht aus vier Spalten: Nachname, Vorname, Datum, Arbeitszeit.

    Ich suche einen Weg um die Arbeitszeiten pro Monat zu bekommen.

    Meine Lösungsansätze:
    ********************************************************************************************

    VB.NET-Quellcode

    1. Dim ergebnis = From entries In dt
    2. Group By Monate = entries.Datum.Month
    3. Into EntriesByMonth = Group, Sum(entries.Arbeitszeit)
    4. For Each a In ergebnis
    5. For Each ab In a.EntriesByMonth
    6. MsgBox(" " & ab.Datum & " " & ab.Arbeitszeit)
    7. Next
    8. Next

    Problem: Ich bekomme die Werte nicht summiert, sondern die Zeiten für jeden einzelnen Tag ausgeworfen

    VB.NET-Quellcode

    1. Dim sumObject As Object
    2. sumObject = dt.Compute("Sum(Arbeitszeit)", "Datum.Month = 8")
    3. MsgBox(sumObject)

    Problem: Datum.Month ist unbekannt.

    VB.NET-Quellcode

    1. Dim monate = dt.AsEnumerable().GroupBy(Function(x) x.Datum.Month)
    2. For Each monat In monate
    3. Dim Zeit = dt.AsEnumerable().Sum(Function(x) x.Arbeitszeit)
    4. MsgBox(Zeit)
    5. Next

    Problem: Ich bekommen die Gesamtsumme über alle Monate ausgeworfen.
    ************************************************************************

    Wie ihr seht, habe ich nichts unversucht gelassen :)

    Es wäre super, wenn mir jemand bei der Abfrage helfen könnte.

    Vielen Dank schonmal!

    Ruediger
    Das Datenmodell ist fehlerhaft. Du solltest 2 DataTables haben: Worker und WorkTime mit der Relation Worker->WorkTime. gugge die relationale GrundIdee

    Was du derzeit als Tabelle vorliegen hast, sollte besser nirgends vorliegen, sondern nur als gejointer View in einem DatagridView mit ComboboxColumns präsentiert sein. gugge vier Views-Videos

    Die Gruppierung, die dir jetzt so Schwierigkeiten macht, wäre im korrekten Datenmodell einfach als Summenformel in eine berechnete Spalte geschrieben. gugge DataExpressions
    Hallo!
    Auf dem SQL-Server liegen die auch in verschiedenen Tabellen. Table Worker: W_ID, Name, VName und Table Worktimie: ID, W_ID, Time_Begin, Time_End. Ich hab die nur beim Import in das typ.DS direkt gejoint. Idee war, lieber vorher mit SQL als hinterher umständlich (für mich umständlich!) mit Linq oder anderen Sachen mit denen ich mich noch nicht so auskenne. Scheint aber ja die falsche Entscheidung gewesen zu sein. Ich werde mir deine Tuts gleich mal bei Kaffee und Kecksen zu gemüte führen und mich nochmal melden falls ich noch fragen habe.

    Danke dir wie immer herzlichst für die Tips!
    Jo, eine Konsequenz aussm typisierten Dataset-Ansatz ist: "Vergiss Sql!".
    Die Datenstruktur bleibt am besten so erhalten, wie sie inne DB modelliert ist.
    Das zusammenmanschen mehrerer Tabellen in eine erzeugt Redundanz und vernichtet Information - die du dir hinterher womöglich mit Linq-Grouping wieder aufzubauen versuchst.

    Das mittm Grouping wäre ja noch möglich (zwar von hinten durch die Brust ins Auge, aber...).
    Schwerwiegender ist der Info-Verlust, wo die Daten herkamen. Daher kann eine gejointe Abfrage nicht geändert zurückgespeichert werden, also die basic CRUD - Funktionalität geht verloren.

    hingegen bei Erhalt der Struktur ist Abspeichern vergleichsweise einfach möglich, mittm richtigen Framework sogar als Einzeiler - DBExtensions