0

我正在尝试将一个传递ArrayList给一个DataRow对象,这个想法是将数据从 CSV 导入数据库。

之前在文件Dictionary<string,int>中已经创建了a,列名作为Key,位置索引作为对应的值。

我打算使用它DataTable为每条记录创建一个临时文件,以帮助导入数据库。我最初的想法是这样的:

private DataRow ArrayListToDataRow(ArrayList data, Dictionary<string,int> columnPositions)
{
    DataTable dt = new DataTable();
    DataColumn dc = new DataColumn();
    for (i=0;i<=data.Count;i++)
    {
        dc.ColumnName = columnPositions.Keys[i];
        dt.Columns.Add(dc);
        dt.Columns[columnPositions.Keys[i]].SetOrdinal(columnPositions(columnPositions.Keys[i]);
    }
//TODO Add data to row
}        

但是,当然,键是不可索引的。

有人知道如何实现这一目标吗?

4

1 回答 1

1

由于数据的大小应该与 columnPositions 的大小相同,因此您可以尝试在字典上使用 foreach 而不是 for 循环。

如果要根据可排序索引访问字典值,则需要将其更改为

Dictionary<int, string>

这似乎更有意义,因为您似乎想按顺序阅读它们。

如果你不能改变字典,你可以做这样的事情

var orderedPositions = columnPositions.OrderBy(x => x.Value);
foreach(var position in orderedPositions)
{
  // do your stuff using position.Key and position.Value 
}

.OrderBy 来自 Linq,所以你需要添加

using System.Linq;

到你的班级。

通过按它们的值(columnIndex)而不是默认值(添加项目的顺序)对 columnPositions 进行排序,您可以按照您可能想要的顺序循环它们(就像您使用 for 循环和每次尝试一样)获取下一个 columnPosition)。

于 2013-11-12T12:10:35.370 回答