Verzweifel an einer Abfrage welche ich aus c# in VB konvertiert habe

  • VB.NET
  • .NET 4.5

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von pino.

    Verzweifel an einer Abfrage welche ich aus c# in VB konvertiert habe

    Hallo,

    ich habe ein Datatable mit mehreren Datensätzen wobei 3 Kriterien pro Datensatz eindeutig sein müssen und davon möchte ich den ersten nehmen bzw. den mit dem kleinsten Wert
    Z.Bsp.

    ZuEl
    TsNr
    Nummer
    TabelleZeilenNr
    Bemerkung
    Zeilennr
    Köln
    TS001090

    S863131

    10000
    Test 1
    10000
    Berlin
    TS001090

    S863132
    10000
    Test 2
    20000
    Berlin
    TS001090

    S863132
    10000
    Test 3
    30000

    In meiner Abfrage müssen die Felder TsNr,Nummer,TabelleZeilenNr identisch sein und dann nur den Datensatz nehmen, der mit Zeilennr den kleinsten Wert hat
    Als Ergebnis sollten somit die ersten beiden Zeilen nur ausgegeben werden.

    Ein Kollege hat mir das in C# umgesetzt, allerdings benötige ich dieses in VB

    Ich habe das Ganze durch einen Converter laufen lassen aber mein Ergebnis sind immer alle Datensätze :(

    Hier der Code in c#

    Quellcode

    1. var rows = dt.AsEnumerable().Select(row => new Row {
    2. Nr = row.Field<string>("TsNr"),
    3. Nummer = row.Field<string>("Nummer"),
    4. TabelleZeilenNr = row.Field<int>("TabelleZeilenNr"),
    5. Bemerkung = row.Field<string>("Bemerkung"),
    6. ZeilenNr = row.Field<int>("Zeilennr"),
    7. Zu = row.Field<string>("ZuEl"),
    8. }).ToList();
    9. var rows2 = rows.GroupBy(el => new { el.Nr, el.Nummer, el.TabelleZeilenNr }).ToList();
    10. var rows3 =
    11. rows2.Select(
    12. gr => gr.OrderBy(x => x.ZeilenNr).Select(x => new { x.Bemerkung, x.Zu } ).First()
    13. ).ToList();



    Und hier die Übersetzung in VB

    Quellcode

    1. Dim rows = dt.AsEnumerable().[Select](Function(row) New Row With {
    2. .Nr = row.Field(Of String)("TsNr"),
    3. .Nummer = row.Field(Of String)("Nummer"),
    4. .TabelleZeilenNr = row.Field(Of Integer)("TabelleZeilenNr"),
    5. .Bemerkung = row.Field(Of String)("Bemerkung"),
    6. .ZeilenNr = row.Field(Of Integer)("Zeilennr"),
    7. .Zu = row.Field(Of String)("ZuEl")
    8. }).ToList()
    9. Dim rows2 = rows.GroupBy(Function(el) New With {el.Nr, el.Nummer, el.TabelleZeilenNr
    10. }).ToList()
    11. Dim rows3 = rows2.[Select](Function(gr) gr.OrderBy(Function(x) x.ZeilenNr).[Select](Function(x) New With {x.Bemerkung, x.Zu
    12. }).First()).ToList()


    Das Problem liegt vermutlich in der letzten Zeile da >= fehlt aber ich bekomme das einfach nicht hin. Kann mir das jemand übersetzen bzw. sagen wie ich das richtig umsetze?
    Nein, das => ist C#-Syntax, welche in VB.Net anders ist. Codeblock#2, Z#17 ist bereits das Problem, da dort 3 Gruppen entstehen statt 2. Habe festgestellt, dass nach etwas Recherche und Finden dieses Codeproject-Artikel noch etwas in jener Zeile fehlt, nämlich das Key-Schlüsselwort. Richtig lautet dann die Zeile:

    VB.NET-Quellcode

    1. Dim rows2 = rows.GroupBy(Function(el) New With {Key el.Nr, Key el.Nummer, Key el.TabelleZeilenNr}).ToList()


    btw: bitte korrekte CodeTags verwenden
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.