Verwenden von LINQ Group Joins in VB.NET
-
26-10-2019 - |
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.
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()