在C#中从DataTable中删除列


113

我有一个DataSet,它从函数调用中传回了我的数据表。它有15到20列,但是我只想要10列的数据。

有没有一种方法可以删除那些我不想要的列,将DataTable复制到另一个仅定义了我想要的列的方法,或者只是更好地迭代集合并只使用我需要的列即可。

我需要将这些值写到固定长度的数据文件中。


我对收到的数据集没有任何控制权。我唯一知道的是它包含了所有内容。
布赖恩·G

Answers:


302

除了限制选择以减少带宽和内存的列之外:

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

13
只是要澄清一下:当DataTable已经有行时,这不仅适用于empty,也适用DataTable
Uwe Keim 2015年

23

要删除所需列之后的所有列,下面的代码应该起作用。它将在索引10处删除(请记住列基于0),直到列数等于或小于10。

DataTable dt;
int desiredSize = 10;

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

1
只是我的2c,我不喜欢这种解决方案,使用列索引会导致噩梦般的维护
Roberto

1
问题包括以下语句:“ ..我定义了我想要的列”,这意味着所需的列甚至不一定按顺序排列,因此不能简单地说“我需要前10列”。这样,解决方案必须包含他想要的列名称数组,然后我们可以消除所有其他未包含在此“定义”名称集中的列。不同的实现方式;从简单的foreach循环到使用IN查询或linq。
罗伯托

3

该问题已经被标记为已回答,但是我想这个问题表明该人想要从中删除多个列DataTable

因此,当我遇到相同的问题时,这就是我所做的。

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

foreach (string ColName in ColumnsToBeDeleted)
{
    if (dt.Columns.Contains(ColName))
        dt.Columns.Remove(ColName);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.