我正在尝试将ArrayList
传递给DataRow
对象,其目的是将数据从CSV导入数据库。
以前在文件中,已创建Dictionary<string,int>
,列名为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
}
但当然,密钥不可索引。
有人知道如何实现这一目标吗?
答案 0 :(得分: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,所以yuo需要添加
using System.Linq;
到你的班级。
通过对其值(columnIndex)而不是默认值(添加项目的顺序)排序columnPositions,您可以按照您可能想要的顺序循环它们(看到你正在使用for循环和每次尝试获取下一个columnPosition)。