0

オブジェクトにを渡そうとしてArrayListDataRowます。CSV からデータベースにデータをインポートするという考えです。

以前に、ファイル内にDictionary<string,int>、列名をキーとして、位置インデックスを対応する値として、a が作成されました。

DataTableこれを使用して、DB へのインポートを支援するために各レコードの一時を作成することを計画していました。私の最初のアイデアは、次のようなものでした。

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 のサイズと同じでなければならないため、for ループの代わりに辞書に対して foreach を使用してみることができます。

ソート可能なインデックスに基づいて辞書の値にアクセスする場合は、それを次のように変更する必要があります。

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 に答える