linq query to datatable

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von vb_fan.

    linq query to datatable

    Hi,

    ich habe diese Definition einer datatable:

    VB.NET-Quellcode

    1. dtListe4.Columns.Add("pus", Type.GetType("System.String"))
    2. dtListe4.Columns.Add("zahlwert_kd", Type.GetType("System.Double"))
    3. dtListe4.Columns.Add("diff", Type.GetType("System.Double"))
    4. dtListe4.Columns.Add("status", Type.GetType("System.String"))
    5. dtListe4.Columns.Add("brutto_abw", Type.GetType("System.Double"))
    6. dtListe4.Columns.Add("netto-wert-r", Type.GetType("System.Double"))
    7. dtListe4.Columns.Add("netto-wert-kd", Type.GetType("System.Double"))
    8. dtListe4.Columns.Add("brutto-wert-kd", Type.GetType("System.Double"))
    9. dtListe4.Columns.Add("zahl-wert-kd", Type.GetType("System.Double"))
    10. dtListe4.Columns.Add("brutto-abw", Type.GetType("System.Double"))


    und diese Linq-Abfrage:

    VB.NET-Quellcode

    1. Dim dtListe4_2 = From row In dsAllg.Tables(1).AsEnumerable()
    2. Let pus = row.Field(Of String)("pus")
    3. Let zahlwert_kd = row.Field(Of Double)("zahlwert_kd")
    4. Let diff = row.Field(Of Double)("diff")
    5. Let status = row.Field(Of String)("status")
    6. Let brutto_abw = row.Field(Of Double)("brutto_abw")
    7. Let netto_wert_r = row.Field(Of Double)("netto-wert-r")
    8. Let netto_wert_kd = row.Field(Of Double)("netto-wert-kd")
    9. Let brutto_wert_kd = row.Field(Of Double)("brutto-wert-kd")
    10. Let zahl_wert_kd = row.Field(Of Double)("zahl-wert-kd")
    11. Let brutto_abw2 = row.Field(Of Double)("brutto-abw")
    12. Group By pus, status Into sum_zahlwert_kd = Sum(zahlwert_kd), sum_diff = Sum(diff), sum_brutto_abw = Sum(brutto_abw), _
    13. sum_netto_wert_r = Sum(netto_wert_r), sum_netto_wert_kd = Sum(netto_wert_kd), sum_brutto_wert_kd = Sum(brutto_wert_kd), _
    14. sum_zahl_wert_kd = Sum(zahl_wert_kd), sum_brutto_abw2 = Sum(brutto_abw2)
    15. Select pus, sum_zahlwert_kd, sum_diff, status, sum_brutto_abw, sum_netto_wert_reh, sum_netto_wert_kd, sum_brutto_wert_kd, _
    16. sum_zahl_wert_kd, sum_brutto_abw2


    Ich möchte nun das Ergebnis dieser Linq-Abfrage in die gleiche datatable zurückschreiben:

    VB.NET-Quellcode

    1. dtListe4.Rows.Clear()
    2. dtListe4 = DirectCast(dtListe4_2, EnumerableQuery(Of DataRow)).CopyToDataTable


    Aber ich bekomme die Fehlermeldung, dass "Unable to cast object of type 'WhereSelectEnumerableIterator`2[VB$AnonymousType_12`10 ... to type 'System.Linq.EnumerableQuery`1[System.Data.DataRow]'".

    Ich habe das mit Ienumerable(of datarow) auch versucht, gleicher Fehler.

    Kann mich hier jemand unterstützen?

    Vielen Dank.

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

    der fehler sagt dir, dass dtListe4_2 kein EnumerableQuery(Of DataRow) ist, da kannst du glaub nix dran ändern.

    mir scheint dieser untypisierte, oder semi-typisierte Ansatz auch ziemlich aufwändig - schonmal überlegt, ein richtiges typisiertes Dataset zu nehmen?
    auf vier Views-Videos ist gezeigt, wie man damit was entwickeln kann.

    Linq2Dataaset ist mit typisierten Datasets vielfach komfortabler.

    vb_fan schrieb:

    und wie kann ich dann ein typisiertes Dataset nehmen/benutzen?
    schaue Film1 (Datamodel) genau an, da zeigt @ErfinderDesRades: ganz genau, wie so etwas erstellt wird...
    Bei den anderen Filmen wird gezeigt, wie man's benutzen kann...

    wovon wird ein Dataset typisiert?
    Was meinst du da genau?
    ich habe mir den Film angeschaut, aber wie ich sehe, wird da das eingebaute Tool von vs genutzt, um ein dataset zu erstellen

    in meinem Fall fülle ich die datatable aus einer Excle-Datei (es werden einige Voraussetzungen geprüft, nicht jede Zeile kommt in die Tabelle)

    das mit dem "typisiert" meine ich so: wann nennt man ein dataset typisiert? was macht ein dataset typisiert?
    Wie ich sehe, hast du trotzdem alle Spaltennamen schon vorgegeben, nur die Daten kommen aus dem Excel-File. Genau so machst du das mit dem typisierten DataSet, nur dass du die Spalten direkt ansprichst und nicht über Umweg.

    Z.B. DataSet1.MeinName.AddMeinNameRow(.....).
    wann nennt man ein dataset typisiert? was macht ein dataset typisiert?
    na, wenn mans im Dataset-Designer anlegt.

    auch ein aus Excel zu befüllendes Dataset kannst du im DatasetDesigner anlegen.

    Das typisierte Dataset ist eine vom Designer generierte Klasse, die von Dataset erbt, und es um viele wichtige Eigenschaften erweitert.