LINQ - непонятное.
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 query1pair.item.Surcharge = pair.surcharge.SurchargeNext
или
foreach (var pair in query1){pair.item.Surcharge = pair.surcharge.Surcharge;}
Вроде все правильно.
Вопросик - где же Я ошибся - в ЦС-версии - pair.surcharge.Surcharge; - всегда имеет значение "0"?!!
Доступ - правильный - значение пересчитываемое - выполняется присваивание.
При этом дамп исходного источника говорит что нолей там нет.
И вполне себе без проблем строится набор query1.
П.С. ВБ-версия - работает, проблема только в ЦС-версии.