使用Dictionary订购DataTable行

时间:2013-11-12 12:05:36

标签: c# dictionary datatable

我正在尝试将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
}        

但当然,密钥不可索引。

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

1 个答案:

答案 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)。