C# Datatable: Суммирует значения строк, когда строки имеют повторяющиеся строковые значения - PullRequest
0 голосов
/ 01 мая 2020

Нужен простой метод для суммирования значений строки (столбцы типа int), когда значение столбца строки содержит дубликаты в датируемой таблице. И нужно удалить строки, имеющие повторяющиеся значения. Ниже приведены данные, например.

Ниже таблицы имеют повторяющиеся значения "AAA", поэтому необходимо суммировать Int_Col3, Col4, Col5, Col6, Col7. Обратите внимание, что столбцы с Int являются целочисленными столбцами.

Example datatable

Ожидаемый тип данных: enter image description here

1 Ответ

1 голос
/ 01 мая 2020

Вот простой способ добиться того, чего вы хотите, на месте. (Та же самая таблица данных преобразуется в ожидаемое состояние)

private static void CombineDuplicatesInPlace(DataTable dt)
{
    Dictionary<string, DataRow> cachedRows = new Dictionary<string, DataRow>();

    for (int i = 0; i < dt.Rows.Count; i++)
    {
        DataRow dataRow = dt.Rows[i];
        string key = Convert.ToString(dataRow["String_Col1"]);
        if (cachedRows.ContainsKey(key))
        {
            DataRow existingRow = cachedRows[key];

            foreach (DataColumn dc in dt.Columns)
                if (dc.DataType == typeof(int))
                    existingRow[dc] = (int)existingRow[dc] + (int)dataRow[dc];

            dt.Rows.Remove(dataRow);
            i--;
        }
        else { cachedRows[key] = dataRow; }
    }
}
...