Перевести неясный LINQ - PullRequest
       1

Перевести неясный LINQ

0 голосов
/ 22 сентября 2010

Какой-то давно ушедший разработчик оставил следующий запрос LINQ без документации, и я изо всех сил пытаюсь понять, что он делает (и, следовательно, если он делает это правильно).Может ли кто-нибудь помочь перевести это, либо разбив его на куски, либо предоставив эквивалент SQL?

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 Ответ

1 голос
/ 23 сентября 2010

Часть, с которой вы боретесь, похоже, выполняет левое внешнее соединение с объектами заявки на VIN.

То есть для каждой строки в mcs, которая имеет соответствующий VIN в r.Itemsон находит самый последний (по OrderDate) элемент из StatementTarget, который имеет тот же VIN, если таковой имеется

Запрос возвращает анонимный объект с 5 полями:

  • Wh независимо = строка изmcs
  • Match = элемент из requestTarget, который имеет соответствующий VIN и самую последнюю OrderDate (или ноль)
  • Result = элемент из r.Items с тем же VIN
  • InTMS = количество строк в заявке-цели, которые имеют соответствующий VIN, где PDSCargoItemID не равен 0
  • InOTA = количество строк в заявке-цели, которые имеют соответствующий VIN, где TransportItemInID не равен нулю
...