C#のDataTableから列を削除する


112

関数呼び出しから返されているDataTableを取得したDataSetがあります。15〜20列ですが、10列のデータのみが必要です。

不要な列を削除する方法はありますか、DataTableを、必要な列のみが定義されている別の列にコピーするか、コレクションを反復処理して必要な列を使用する方がよいでしょう。

値を固定長のデータファイルに書き出す必要があります。


受信したデータセットを制御できません。私が知っている唯一のことはそれがすべてを含んでいるということです。
ブライアンG

回答:


301

帯域幅とメモリを削減するために選択された列を制限する以外に:

DataTable t;
t.Columns.Remove("columnName");
t.Columns.RemoveAt(columnIndex);

13
明確にするために:これDataTableは、空のだけでなく、すでに既存の行がある場合にも機能しますDataTable
Uwe Keim

23

必要な列の後のすべての列を削除するには、以下のコードが機能するはずです。列数が10以下になるまで、インデックス10で削除されます(列は0ベースであることに注意してください)。

DataTable dt;
int desiredSize = 10;

while (dt.Columns.Count > desiredSize)
{
   dt.Columns.RemoveAt(desiredSize);
}

1
ちょうど私の2cは、私は...悪夢のメンテナンスに列インデックスのリードで働いて、このソリューション好きではない
ロベルト・

1
「..columns defined that I want ..」という質問が含まれているため、必要な列が必ずしも順番に並んでいるとは限らないため、「最初の10列が必要」とは言えません。そのため、ソリューションには彼が望む列名の配列が含まれている必要があるため、この「定義された」名前のセットに該当しない他のすべてを排除できます。これを実装するさまざまな方法。単純なforeachループから、INを使用したクエリまたはlinqまで。
Roberto

3

質問にはすでに回答済みのマークが付けられていますが、この質問では、ユーザーがから複数の列を削除することを望んでいると思いますDataTable

それで、同じ問題に遭遇したとき、私がやったことはここにあります。

string[] ColumnsToBeDeleted = { "col1", "col2", "col3", "col4" };

foreach (string ColName in ColumnsToBeDeleted)
{
    if (dt.Columns.Contains(ColName))
        dt.Columns.Remove(ColName);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.