LINQ group by - ich kapiers nicht

  • VB.NET

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

    LINQ group by - ich kapiers nicht

    Hi, ich habe folgendes:

    VB.NET-Quellcode

    1. Dim qArtikel = From A In m_Dataset.Tables("Auftraege") _
    2. Join K In m_Dataset.Tables("Vorschlaege") _
    3. On A.Field(Of Int32)("ID") Equals K.Field(Of Int32)("AuftragsID") _
    4. where A.Field(Of Int64)("Auswahl") = 1 _
    5. Select New With { _
    6. .Teilenummer = K.Field(Of String)("Teilenummer"), _
    7. .Name = K.Field(Of String)("Name"), _
    8. .Anzahl = K.Field(Of Int32)("Anzahl") _
    9. }


    Das Ergebnis möchte ich jetzt noch nach der Teilenummer gruppieren (der Name ist je Teilenummer eindeutig)
    und die Summe der Teile berechnen, so dass ich eine Liste mit folgenden Elementen bekomme:
    Teilenummer , Name, Sum(Anzahl)

    Und jetzt mein Problem:
    Das ist mein Versuch bisher mit dem ich mit folgender Meldung in der ersten with-Zeile hängenbleibe:
    "Der Name einer Bereichsvariablen kann nur von einem einfachen oder qualifizierten Namen ohne Argumente abgeleitet werden"

    VB.NET-Quellcode

    1. Dim qArtikelGrouped2 = from A in qArtikel _
    2. group A by _
    3. new With {A.Teilenummer, A.Name} _
    4. into g _
    5. select new With _
    6. { _
    7. .....
    8. }


    Wie geht das denn jetzt richtig ? ;(

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

    picoflop schrieb:

    Wonach willst du denn gruppieren?

    Duke schrieb:

    Das Ergebnis möchte ich jetzt noch nach der Teilenummer gruppieren (der Name ist je Teilenummer eindeutig)
    und die Summe der Teile berechnen, so dass ich eine Liste mit folgenden Elementen bekomme:
    Teilenummer , Name, Sum(Anzahl)

    Der Name ist zwar eindeutig je Artikelnummer, soll aber in der neuen List mit enthalten sein.
    Ich hatte das schon mal geschafft mit einem Tipp aus dem Internet, aber ich finde das einfach nicht mehr.

    In SQL wäre das dann

    SQL-Abfrage

    1. select Artikelnummer, Name, sum(Anzahl) from ...
    2. group by Artikelnummer, Name



    PS: Die VB-Probleme tauchen dann auf, wenn man die C#-Samples konvertiert.
    C# Samples habe ich schon gefunden (hier ist zum Beispiel ein gutes) aber ich bekomme das
    einfach nicht nach VB umgebaut. (hört sich komisch an, ist aber so ;) )

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

    Ich habs jetzt - wenn auch nicht so elegant, wie erhofft - folgendemaßen gelöst:

    VB.NET-Quellcode

    1. Dim qArtikelGrouped3 = From A In qArtikel _
    2. Group A By ArticleGrp = A.Teilenummer _
    3. Into myGroup = Group, Sum(A.Anzahl)

    Der Zugriff erfolgt dann über

    VB.NET-Quellcode

    1. Row.ArticleGrp
    2. Row.myGroup.First.Name
    3. Row.Sum


    Wenn das noch jemand in VB mit dem Gruppieren über 2 Felder in einem Schritt
    hinbekommt, wäre ich nach wie vor interessiert (siehe Beispiel)