从C#中的DataTable中删除列

Bri*_*n G 102 c# asp.net

我有一个DataSet,我从一个函数调用传递回来的DataTable.它有15-20列,但我只想要10列数据.

有没有办法删除那些我不想要的列,将DataTable复制到只有我想要的列定义的另一个列,或者只是更好地迭代集合并只使用我需要的列.

我需要将值写入固定长度的数据文件.

Tom*_*ter 281

除了限制所选列以减少带宽和内存:

DataTable t;
t.Columns.Remove("columnName");
t.Columns.RemoveAt(columnIndex);
Run Code Online (Sandbox Code Playgroud)

  • 只是为了澄清:当`DataTable`已经有现有行时,这也有效,而不仅仅是在一个空的`DataTable`上. (9认同)

Tim*_*ter 21

要删除所需列之后的所有列,这个小功能应该可以工作.它将在索引10处删除(记住列基于0),直到列计数为10或更少.

        DataTable dt;
        int desiredSize = 10;

        while (dt.Columns.Count > desiredSize)
        {
            dt.Columns.RemoveAt(desiredSize);
        }
Run Code Online (Sandbox Code Playgroud)

  • 只是我的 2c,我不喜欢这个解决方案,使用列索引会导致噩梦般的维护.. (2认同)
  • 该问题包括以下语句:“..columns 定义了我想要的......”所以这意味着需要的列甚至不一定按顺序排列,所以不能简单地说“我需要前 10 列”。因此,解决方案必须包含他想要的列名数组,然后我们可以消除所有其他不属于这个“定义”名称集的列名。实现这一点的不同方法;从简单的 foreach 循环到使用 IN 的查询或 linq。 (2认同)

SU7*_*SU7 9

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

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

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

foreach (string ColName in ColumnsToBeDeleted)
{
    if (dt.Columns.Contains(ColName))
        dt.Columns.Remove(ColName);
}
Run Code Online (Sandbox Code Playgroud)