【问题标题】:VB.net LINQ Left Join with all resultsVB.net LINQ 左连接所有结果
【发布时间】:2018-01-10 04:12:53
【问题描述】:

我找不到适用于当前 .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

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

请问有人可以帮我吗? 谢谢。

【问题讨论】:

    标签: vb.net linq join left-join


    【解决方案1】:

    我认为您想使用Group Join,它在 VB 中是显式的:

    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)
    

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

    如果您不想在 Statuses 中列出列表,可以将其展平:

    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)
    

    【讨论】:

    • 谢谢。有效。我必须添加“... into rj = Group...”才能正常工作。
    • 很抱歉 - 主要是 C# 用户。
    猜你喜欢
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    相关资源
    最近更新 更多