2010-09-22 53 views
0

一些久远的开发者在没有文档的情况下留下了下面的LINQ查询,我正在努力理解它的功能(因此如果它正确的话)。有人可以通过将其分解成碎片或提供相应的SQL来帮助翻译它吗?翻译晦涩LINQ

Dim matches = From mc In mcs _ 
       Join ri In r.Items On ri.VIN Equals mc.VIN _ 
       Group Join t In (From t In claimTarget 
           Order By t.VIN Ascending, t.OrderDate Descending) On _ 
         t.VIN Equals mc.VIN Into TargetMatches = Group, _ 
       InTMS = Count(Not t.PDSCargoItemID = 0), _ 
       InOTA = Count(Not t.TransportItemInID.IsValueNull) _ 
       Select Whatever = mc, Match = TargetMatches.FirstOrDefault, Result = ri, InTMS, InOTA 

我很努力,特别是与集团加入,并进入TargetMatches =组件:

Group Join t In (From t In claimTarget Order By t.VIN Ascending, t.OrderDate Descending) On _ 
t.VIN Equals mc.VIN Into TargetMatches = Group 

回答

1

您正在使用似乎是做了left outer join反对对VIN claimTargets挣扎的作品。

因此,对于具有相同的VIN MCS中的每一行已在r.Items匹配的VIN找到最近的(按订购日期)从claimTarget项目,如果有的话

查询返回的匿名对象与5场:

  • 不管=来自MCS行
  • 匹配=从claimTarget有来自r.Items匹配的VIN和最新的订购日期(或空)
  • 结果=该项目的项目是具有相同的VIN
  • InTMS =来自claimTarget具有匹配VIN的行数的计数,其中PDSCargoItemID不为0
  • InOTA =行从claimTarget具有匹配VIN的数目的计数,其中TransportItemInID不为空
+0

我很高兴有人回答,所以我可以把它关闭。看起来有些困惑起源于我的C#脑试图理解荒谬的VB构造...... – Michael 2010-09-23 20:00:19