2008-09-16 7 views
82

私はDataTableを取得していますが、これは関数呼び出しから返されています。それは15-20の列を持っていますが、私はデータの10の列しか必要としません。C#のDataTableから列を削除します

不要な列を削除する方法はありますか?DataTableを、必要な列のみを持つものにコピーするか、コレクションを反復処理して必要な列だけを使用するほうがよいでしょうか。

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

+0

私は受け取ったデータセットを制御しません。私が知っている唯一の事は、すべてが入っていることです。 –

答えて

217

別に帯域幅とメモリを削減するために選択した列を制限するから:

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

明確にする:これは、空の 'DataTable'だけでなく' DataTable'にすでに既存の行がある場合にも機能します。 –

21

が希望の1の後にすべての列を削除するには、この小さな機能は動作するはずです。カラム数が10以下になるまで、インデックス10(カラムは0ベースであることを覚えておいてください)で削除されます。

 DataTable dt; 
     int desiredSize = 10; 

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

ちょうど私の2cですが、私はこの解決策が気に入らない、列インデックスを使って作業すると悪夢のメンテナンスにつながります。 – batman

+0

@batmanどうやって書くのですか? – Muflix

+0

質問には次のような文が含まれています: "..私が望むように定義された列"という意味は、必要な列が必ずしも順番に並んでいないことを意味するので、単に「最初の10列が必要です。そのようなソリューションには、必要な列名の配列が含まれている必要があります。したがって、この定義された名前セットに収まらない他のすべての文字列を削除できます。これを実装するさまざまな方法。単純なforeachループからINを使用してクエリまたはlinqに渡す。 – batman

関連する問題