Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

LINQ​ - непонятное.

232  
Murr патриот12.05.17 14:00
Murr
12.05.17 14:00 

LINQ - непонятное.


Имею следующий код:

ВБ-версия:

Dim query1 = From itm In dt.Rows.Cast(Of DataRow).Select(Function(i) CType(i, TOrderRow)) _
Join sur In pEnergySurcharge.Rows.Cast(Of DataRow).Select(Function(s) CType(s, BO.Base.TEnergySurchargeRow)) _
On _
itm.OrderNo Equals sur.OrderNo And _
itm.ItemNo Equals sur.ItemNo And _
itm.ComponentNo Equals sur.ComponentNo _
Select New With {.item = itm, .surcharge = sur}

ЦС-версия:

var query1 =
from itm in this.Cast<TOrders.Row>().Select(i => i)
join sur in pEnergySurcharge.Cast<TEnergySurcharge.Row>().Select(s => s)
on new { itm.OrderNo, itm.ItemNo, itm.ComponentNo }
equals new { sur.OrderNo, sur.ItemNo, sur.ComponentNo }

select new { item = itm, surcharge = sur };

Разница между имплементациями TEnergySurchargeRow и TEnergySurcharge.Row есть, но ничего существенного не менялось - оба класса - врапперы над DataRow.

Пожалуй, единственное отличие - в первой реализации есть оператор приведения к DataRow, а во второй - нету. Он там не нужен.

Во второй реализации есть интерфейс, с помощью которого можно получить доступ к оригинальной DataRow, но мне это требовалось всего раза 3-4...


Следующая операция - переписывание значения Surcharge:

For Each pair In query1
pair.item.Surcharge = pair.surcharge.Surcharge

Next

или

foreach (var pair in query1)
{
pair.item.Surcharge = pair.surcharge.Surcharge;
}

Вроде все правильно.


Вопросик - где же Я ошибся - в ЦС-версии - pair.surcharge.Surcharge; - всегда имеет значение "0"?!!

Доступ - правильный - значение пересчитываемое - выполняется присваивание.

При этом дамп исходного источника говорит что нолей там нет.

И вполне себе без проблем строится набор query1.


П.С. ВБ-версия - работает, проблема только в ЦС-версии.

#1 
Murr патриот12.05.17 16:09
Murr
NEW 12.05.17 16:09 
в ответ Murr 12.05.17 14:00

Отбой - могли писать и реально писали нолики в pair.surcharge.Surcharge;...

И такое бывает...

#2