Я ломал голову над этим... У меня есть таблица в памяти, DataTable, структурированная следующим образом:
Input:
ID | Invoice | Account | Payment | Subtotal
-----------------------------------------------------------------
0 | 09310 | 123 | 6.0 | ?
-----------------------------------------------------------------
И я хочу использовать Linq для выполнения следующих действий (я новичок в Linq!)
Для каждой строки, относящейся к одной и той же учетной записи, сложите все платежи и напишите или обновите поля промежуточных итогов. Я не хочу сворачивать таблицу, номера счетов-фактур будут другими. Я думаю, что есть два способа, как это можно сделать
(A) начните с ПУСТОГО столбца промежуточных итогов для всех записей... значения платежа будут сложены вместе, а затем записаны в столбец промежуточных итогов
(B) при создании таблицы я ДУБЛИРУЮ значения платежа в промежуточные поля. Позже linq нужно будет только добавить/заменить значения в том же столбце.
Таким образом, мы бы проигнорировали поля ID и Invoice; его СЧЕТ и ПРОМЕЖУТОЧНЫЙ ИТОГ (а также ОПЛАТА, если используется стиль (A))
(A) Input: *(note that there are two records for 123)*
ID | Invoice | Account | Payment | Subtotal
-----------------------------------------------------------------
0 | 03310 | 123 | 6.0 |
-----------------------------------------------------------------
1 | 09728 | 123 | 4.0 |
-----------------------------------------------------------------
2 | 07731 | 559 | 18.0 |
-----------------------------------------------------------------
(B) Input:
ID | Invoice | Account | Payment | Subtotal
-----------------------------------------------------------------
0 | 03310 | 123 | 6.0 | 6.0
-----------------------------------------------------------------
1 | 09728 | 123 | 4.0 | 4.0
-----------------------------------------------------------------
2 | 07731 | 559 | 18.0 | 18.0
-----------------------------------------------------------------
Result:
ID | Invoice | Account | Payment | Subtotal
-----------------------------------------------------------------
0 | 03310 | 123 | 6.0 | 10.0
-----------------------------------------------------------------
1 | 09728 | 123 | 4.0 | 10.0
-----------------------------------------------------------------
2 | 07731 | 559 | 18.0 | 18.0
-----------------------------------------------------------------
Итак, в каждой ячейке промежуточного итога будет сумма всех ПЛАТЕЖЕЙ для каждого уникального СЧЕТА.
Я думаю, что стиль (B) будет проще, потому что нам нужно иметь дело только с этими двумя столбцами.
Для стиля (B) я пробовал что-то вроде
rpTable.AsEnumerable().GroupBy(g => int.Parse(g.Field<string>("Account"))).Select(g => g.Sum(p => p.Field<decimal>("SubTotal")));
но я могу сказать, что чего-то не хватает..... хммм