Преобразование определенного элемента массива элементов DataRow?

В настоящее время код приложения считывается непосредственно из Excel, что дает мне DataTable. Он имеет столбец со свойством месяца (последнее значение массива элементов строки данных). В db месяцы хранятся как значение int.

Я не могу придумать подход, кроме использования инструмента LINQ, чтобы просто изменить/преобразовать последнее значение ItemArray каждой строки данных и изменить имя месяца на номер месяца, а затем сформировать новую таблицу данных перед запуском запроса.

DataTable dt = obj.ToDataTable();
dt = dt.Rows.Cast<DataRow>().Select(row => row.ItemArray.Select(x => ???)).CopyToDataTable() //stuck here

person Shad    schedule 04.02.2021    source источник
comment
var results = dt.AsEnumerable().Select(row => row.Field‹string›(0)).ToArray(); В результатах меньше столбцов, чем в исходной таблице, поэтому вы не можете использовать CopyToDataTable();   -  person jdweng    schedule 04.02.2021
comment
Знаете ли вы имя столбца, которое представляет месяц из листа Excel? Вы хотите изменить MonthName на MonthNumber в том же месте или вы создаете новый столбец для MonthNumber?   -  person Chetan Ranpariya    schedule 04.02.2021
comment
@ChetanRanpariya да, знаю. В том же месте, поэтому он правильно хранится в БД, где таблица имеет тип столбца month (int).   -  person Shad    schedule 04.02.2021


Ответы (1)


Вы можете решить свою проблему проще, используя цикл foreach, чем LINQ.

DataTable dataTable = obj.ToDataTable();

// Store the column index of the Month column
var monthColIndex = dataTable.Columns.Count - 1; // Index of Last Column
    
    foreach(var dataRow in dataTable.Rows)
    {
        var row = dataRow as DataRow;
        // Get Month Number from the Month Name column from each row.
        var monthNumber = DateTimeFormatInfo.CurrentInfo.MonthNames.ToList().IndexOf(row[monthColIndex].ToString()) + 1;
        // Assign monthNumber to the last column value in each row.
        row[monthColIndex] = monthNumber;
    }

Я надеюсь, что это поможет вам решить вашу проблему.

person Chetan Ranpariya    schedule 04.02.2021