LinQ und Datatables

  • VB.NET

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

    LinQ und Datatables

    Hallo zusammen

    Ich habe eine Datatable (Spalten Vorname und Betrag) die folgende Einträge hat
    Hans5
    Fritz3
    Hans1
    Fritz9
    Sepp2
    Hans7

    Nun möchte ich mich LINQ eine Gruppierung nach Vorname und Summe pro Person ausgeben:
    Leider habe ich trotz Einarbeitung in Linq und unzähliger Versuche es nicht fertig gebracht.

    VB.NET-Quellcode

    1. Dim query = From dt In dt Group By dtoriginal.Columns("Vorname") Into Group


    Allein schon bei der Gruppierung gibt es einen Fehler. Noch bevor ich die Summe eingliedern konnte.
    Es sollte doch möglich sein direkt mit einer Datatable zu arbeiten und nicht diese erst in eine Collection umzuwandeln...

    Das zweite Problem: Wenn ich die Datensätze in der Variablen query einmal habe, wie kann ich diese an ein Datagridview binden?

    Wer kann mir da helfen?
    Hier hast du es mit der Gruppierung:

    VB.NET-Quellcode

    1. Dim testtable As New DataTable
    2. testtable.Columns.Add("vorname", Type.GetType("System.String"))
    3. testtable.Columns.Add("betrag", Type.GetType("System.Int32"))
    4. testtable.Rows.Add("Hans", 5)
    5. testtable.Rows.Add("Fritz", 3)
    6. testtable.Rows.Add("Hans", 1)
    7. testtable.Rows.Add("Fritz", 9)
    8. testtable.Rows.Add("Sepp", 2)
    9. testtable.Rows.Add("Hans", 7)
    10. Dim query = testtable.AsEnumerable.GroupBy(Function(row) row.Item(0)).
    11. Select(Function(g) New With {.vorname = g.Key, .betrag = g.Sum(Function(row) Convert.ToDouble(row.Item(1)))})
    12. For Each r In query
    13. Debug.Print(r.vorname.ToString & "****" & r.betrag.ToString)
    14. Next


    Und ja, leider muss man die Datatable in eine Collection "casten".

    Dann das Ergebnis an ein datagridview zu binden, musst du das Ergebnis leider wieder in ein Datatable packen, soviel ich weiss.
    Vielen Dank. In meinem Fall war zudem die Spalte mit den Beträgen unerklärlicherweise eine String-Spalte. Ich habe nun eine zusätzliche berechnete Spalte mit dem Typ Double angefügt und konnte so den Code von vb_fan direkt anwenden. Am Schluss halt nochmals via Schlaufe eine neue Datatable erstellen und ans Datagridview anbinden. :thumbsup: