VB.net LINQ Left加入所有结果

时间:2017-08-02 19:16:59

标签: vb.net linq join left-join

我无法找到适用于当前.net版本的解决方案。

我有一个订单列表,我有一些订单的附加信息列表。 (订单可能有也可能没有其他信息)。 我正在寻找如何显示所有订单和其他信息(如果存在)。

我正在尝试这个:

       Dim res = From k In o.OrdemItens
          Join r In aditionalInformation On r.idReqCTP Equals k.Controle
          Group By k.Controle Into Group
          From g In Group.DefaultIfEmpty
          Select g.k.Controle, g.r.Status

但它没有用。当订单没有附加信息时,不会返回任何内容。

有人可以帮助我吗? 谢谢。

1 个答案:

答案 0 :(得分:1)

我想你想使用VB中明确的Group Join

Dim res = From k In o.OrdemItens
          Group Join r In aditionalInformation On r.idReqCTP Equals k.Controle Into rj = Group
          Select k.Controle, Statuses = (From r2 In rj Select r2.Status)

我不知道您在rj中是否有多个匹配给定k,所以我针对它运行了Select

如果您不想在状态中列出一个列表,可以将其展平:

Dim res = From k In o.OrdemItens
          Group Join r In aditionalInformation On r.idReqCTP Equals k.Controle Into rj = Group
          From r2 in rj.DefaultIfEmpty()
          Select k.Controle, r2?.Status

您无法将?.用于数据库,因此您必须执行以下操作:

Dim res = From k In o.OrdemItens
          Group Join r In aditionalInformation On r.idReqCTP Equals k.Controle Into rj = Group
          From r2 in rj.DefaultIfEmpty()
          Select k.Controle, Status = If(r2 Is Nothing, Nothing, r2.Status)