2017-08-02 48 views
-1

我找不到在当前.net版本中可用的解决方案。VB.net LINQ Left与所有结果加入

我有一个订单列表,我有一些订单的附加信息列表。 (该订单可以或不可以有额外的信息)。 我正在寻找如何显示所有订单和其他信息(如果存在)。

我想这一点:

 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

我想你想使用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) 

我不知道,如果你可能有多个比赛中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) 
+0

谢谢您。有效。 我不得不添加“...到rj = Group ...”才能正常工作。 – osmarditto

+0

很抱歉 - 主要是C#用户。 – NetMage