Frage

Ich versuche unten herauszufinden, wie Gruppenverknüpfungen in LINQ-Abfragen verwendet werden VB.NET.Aus irgendeinem Grund ist jedes Beispiel, das ich in der Syntax finde, einfach FALSCH!Zumindest sagt mir das mein Compiler immer wieder.Was genau mache ich hier falsch?

Dies ist ein einfaches Beispiel, bei dem ich Bestellungen mit ihren Bestellpositionen verknüpfen möchte, sodass am Ende ein Typ entsteht, der eine Sammlung von Bestellpositionen enthält, die nach ihren Bestell-IDs gruppiert sind:

Dim groupedOrders = (From o In orders
                     Group Join i In orderItems On o.OrderId Equals a.OrderId Into myOrders
                     Select o.OrderId, myOrders).ToList()

Was mir in diesem Beispiel derzeit auffällt, ist, dass die Gruppe „myOrders“, mit der ich Fehler erstelle, Folgendes auslöst:

Auf die Definition der Methode „myOrders“ kann in diesem Zusammenhang nicht zugegriffen werden.

War es hilfreich?

Lösung

In VB muss der Into-Alias ​​„Group“ und nicht „myOrders“ lauten.Mit Northwind könnten Sie Ihre Anfrage wie folgt formulieren:

Dim groupedOrders = 
   From o On Orders
   Group Join od in Order_Details On o.OrderID Equals od.OrderID Into Group
   Select o.OrderID, Details = Group

Wenn Sie der Gruppe einen anderen Alias ​​geben möchten, können Sie Folgendes verwenden:

Dim groupedOrders = 
   From o On Orders
   Group Join od in Order_Details On o.OrderID Equals od.OrderID Into GroupedDetails = Group
   Select o.OrderID, GroupedDetails

Wenn Ihre Bestellungen und orderItems jedoch von einem Datenbankanbieter stammen, können Sie einfach die natürlichen Zuordnungen verwenden und benötigen den Join überhaupt nicht:

Dim groupedOrders = 
   From o In Orders
   Select o.OrderID, Details = o.Order_Details

Wenn Sie nur nach dem Fremdschlüssel gruppieren müssen, benötigen Sie außerdem nicht die übergeordnete Tabelle:

Dim groupedOrders = 
   From od In Order_Details
   Group od By Key = od.OrderID Into Group
   select Key, Group

Andere Tipps

Du bist nahe. Sie müssen nur feststellen myOrders Als ein Group:

Dim groupedOrders = (From o In orders
                     Group Join i In orderItems On o.OrderId Equals a.OrderId
                     Into myOrders = Group
                     Select o.OrderId, myOrders).ToList()

Sie können ähnliche Beispiele sehen, einschließlich der Erlangung der Gruppe der Gruppe Count, von dieser MSDN -Seite: Einführung in LINQ in Visual Basic.

Ich möchte ein weiteres Beispiel für eine LINQ -Abfrage angeben, wenn ich diese Frage nicht beantworten soll, um eine Kopie zu behalten, auf die ich in Zukunft verweisen kann:

    Dim result As List(Of Reception_Users)

    result = (From recept In MyBase.QueryGlobalStatic(Of HACRECEP)(Function(x) True)
                  Join sys In MyBase.QueryGlobalStatic(Of SYSESSIO)(Function(x) True) On recept.IdLocking Equals sys.Id
                  Join SYUSRG In MyBase.QueryGlobalStatic(Of SYUser)(Function(x) True) On sys.cle_user Equals SYUSRG.Id
                  Group By SYUSRG.Code, SYUSRG.Nom, SYUSRG.Prenom
                      Into Groupuser = Group
                  Select New Reception_Users With
                      {
                      .CodeUsager = Code,
                      .Nom = Nom,
                      .Prenom = Prenom
                      }).ToList() 

Wo myBase.QueryGlobalstatic () eine Funktion ist, die aus meinem Kontext kommt, damit ich diese Art von Code überall einsetzen kann, ohne dass sie (unter anderem) nach Verbindungen oder Authentifizierungsdaten prüfen müssen. Das Äquivalent wird so etwas sein wie:

            result = (From recept In dbContext.HACRECEPs
                  Join sys In dbContext.SYSESSIOs On recept.IdLocking Equals sys.Id
                  Join SYUSRG In dbContext.SYUsers On sys.cle_user Equals SYUSRG.Id
                  Group By SYUSRG.Code, SYUSRG.Nom, SYUSRG.Prenom
                      Into Groupuser = Group
                  Select New Reception_Users With
                      {
                      .CodeUsager = Code,
                      .Nom = Nom,
                      .Prenom = Prenom
                      }).ToList()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top