Какую версию выбрать?
Долго старался понять какого там поинтер у тебя делает?
-----
Ну это бывает... с Шарпе поинтеров нема, но есть параметры. А без "п" - мне уже неудобно...
Похоже на очередной костыль к тому, что имеется.
-----
Ну да - очередной кусок конвертится в объектную форму.
Требуются - имена полей в табличке... ну и вместо того чтобы разбираться во всех 100500 местах где их собирают с тем правильно ли их собирают - все скинуто в субкласс и изолировано от внешнего кода...
Оставалось выбрать в какой форме писать... бо, обычно, там константы и никакие манипуляции не требуется...
Ну а тут - динамика - надо базировать на строках из другой таблицы...
И либо таскать строку, либо придумать ка без этого обойтись...
Придумал... повторов суффиксов нигде нет и работает нормально...
Код, кстати, подсократился и стал более-менее понятным...
Какого имена полей вообще в "ручном" коде делают?
-----
Оригинальная часть:
Private Function fillDRResultCommodities(ByVal DTItemsByCustomer As DataTable, _ByVal DTDistinctIntrastatCodes As DataTable, _
ByVal DRResult As DataRow) As DataRow
Dim sqlFilter As String = Nothing
Dim DRFilter() As DataRow = Nothing
Dim intrastatCode As String = Nothing
Dim columnHeader As String = Nothing
Dim netPriceHomeCurrency As Decimal = 0
Try
For Each DRDistinctIntrastatCode As DataRow In DTDistinctIntrastatCodes.Rows
intrastatCode = DRDistinctIntrastatCode.Item("intrastatCode").ToString & " "
columnHeader = intrastatCode & _
DRDistinctIntrastatCode.Item("commodity").ToString
sqlFilter = "intrastatCode=" & DRDistinctIntrastatCode.Item("intrastatCode").ToString
DRFilter = DTItemsByCustomer.Select(sqlFilter)
If DRFilter.Length > 0 Then
netPriceHomeCurrency = DTItemsByCustomer.Compute("SUM([netPrice homeCurrency])", sqlFilter)
DRResult.Item(columnHeader) = netPriceHomeCurrency.ToString
columnHeader = intrastatCode & "statVal"
' DRResult.Item(columnHeader) = netPriceHomeCurrency - (netPriceHomeCurrency / 100)
DRResult.Item(columnHeader) = netPriceHomeCurrency
columnHeader = intrastatCode & "weight"
DRResult.Item(columnHeader) = DTItemsByCustomer.Compute("SUM(weight)", sqlFilter)
columnHeader = intrastatCode & "sqm"
DRResult.Item(columnHeader) = DTItemsByCustomer.Compute("SUM(sqm)", sqlFilter)
End If
Next
Catch ex As Exception
End Try
Return DRResult
End Function
переработанный код:
public void FillCommodities(TDistinctIntrastatCodes.Distinct pDistinctIntrastatCodes, TItems.Subset pItemsbyCustomer){try {foreach (TDistinctIntrastatCodes.Row intrastatCodeRow in pDistinctIntrastatCodes){Filters.ByIntrastatCode byIntrastatCode = new Filters.ByIntrastatCode();byIntrastatCode.IntrastatCode = intrastatCodeRow.IntrastatCode;TItems.Subset itemsByIntrastatCode = pItemsbyCustomer.Select(byIntrastatCode);if (itemsByIntrastatCode.HasData){TIntrastatCodeRowProxy icp = this[intrastatCodeRow];string netPriceHomeCurrency = itemsByIntrastatCode.SumNetPriceHomeCurrency.ToString();icp.IntrastatCodeComodity = netPriceHomeCurrency;icp.StatVal = netPriceHomeCurrency;icp.Weight = itemsByIntrastatCode.SumWeight.ToString();icp.Sqm = itemsByIntrastatCode.SumSqm.ToString();}}} catch (Exception ex){TExceptionHandler.Error(ex);}}
Упростилось до уровня понимабельности... имена полей - ушли... об ошибочке - письмишко придет... ну и тестируемость доступна...
Вроде нормально?