在VB.NET中使用LINQ组连接



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

这是一个简单的例子,我想将订单与其订单项连接起来,这样我最终得到一个类型,该类型包含了按订单项的orderId分组在一起的订单项集合:

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

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

方法'myOrders'的定义在这个上下文中是不可访问的。

在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

如果你想把这个组别名为其他东西,你可以使用:

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

也就是说,如果您的订单和orderItems来自数据库提供者,您可以只使用自然关联,根本不需要连接:

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

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

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

你很接近了。您只需要将myOrders指定为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()

你可以看到类似的例子,包括如何获得组的Count,从这个MSDN页面:Introduction to LINQ in Visual Basic

我想包含另一个LINQ查询的例子,如果不是为了回答这个问题,那么只是为了保留一个副本,我可以在将来参考:

    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() 

其中MyBase.QueryGlobalStatic()是一个来自我的上下文的函数,以便允许我将这种代码放在任何地方,而无需检查连接或身份验证数据(以及其他事情)。等效的是:

            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()

相关内容

  • 没有找到相关文章

最新更新