转换 DataRow 项目数组的特定元素?

Posted

技术标签:

【中文标题】转换 DataRow 项目数组的特定元素?【英文标题】:Transforming a particular element of DataRow item Array? 【发布时间】:2021-02-04 11:32:28 【问题描述】:

目前,应用程序代码直接从 excel 中读取,给我一个 DataTable。它具有带有月份属性的列(数据行的项目数组的最后一个值)。 在 db 中,月份存储为 int 值。

除了使用 LINQ 工具更改/转换每个数据行的 ItemArray 的最后一个值并将月份名称更改为月份编号,然后在运行查询之前形成一个新的数据表之外,我无法想到其他方法。

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

【问题讨论】:

var results = dt.AsEnumerable().Select(row => row.Field(0)).ToArray();结果的列数少于原始表,因此您不能使用 CopyToDataTable(); 您知道 Excel 表中代表月份的 columnName 吗?您想在同一个地方从 MonthName 更改为 MonthNumber 还是要为 MonthNumber 创建一个新列? @ChetanRanpariya 是的,我愿意。在同一个地方,因此它可以正确存储在表具有月份(int)列类型的数据库中。 【参考方案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;
    

我希望这能帮助您解决问题。

【讨论】:

以上是关于转换 DataRow 项目数组的特定元素?的主要内容,如果未能解决你的问题,请参考以下文章

DataSource绑定DataTable.Select()显示system.data.DataRow问题解决的方法

DataRow数组如何获得行数

.NET里面datatable.rows[i]可以直接转换为DataRow吗?是否要先new一个DataRow,然后再依次赋值?

Mongoose:更新特定文档数组的元素

在 List<DataRow> 中搜索?

如果字符串数组中的列名在字符串数组中具有匹配的值,则获取DataRow