在 VB.NET 中使用 LINQ 组联接

mcl*_*129 4 linq vb.net join linq-group

我想弄清楚如何在VB.NET下的 LINQ 查询中使用 Group Joins 。出于某种原因,我似乎在语法上找到的每个示例都是完全错误的!至少,这是我的编译器一直告诉我的。我到底做错了什么?

这是一个简单的例子,我想将订单加入他们的订单项目,以便我最终得到一个类型,其中包含按订单 ID 分组在一起的订单项目的集合:

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

我目前在这个例子中遇到的是我正在创建错误的 'myOrders' 组:

在此上下文中无法访问方法“myOrders”的定义。

Jim*_*ley 5

在 VB 中,Into 别名需要是“Group”而不是 myOrders。使用 Northwind,您可以按如下方式说明您的查询:

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
Run Code Online (Sandbox Code Playgroud)

如果要将组别名为其他名称,可以使用:

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
Run Code Online (Sandbox Code Playgroud)

话虽如此,如果您的订单和订单项来自数据库提供者,您可以只使用自然关联而根本不需要联接:

Dim groupedOrders = 
   From o In Orders
   Select o.OrderID, Details = o.Order_Details
Run Code Online (Sandbox Code Playgroud)

此外,如果您只需要按外键分组,则不需要父表:

Dim groupedOrders = 
   From od In Order_Details
   Group od By Key = od.OrderID Into Group
   select Key, Group
Run Code Online (Sandbox Code Playgroud)