【问题标题】:Remove columns from DataTable in C#从 C# 中的 DataTable 中删除列
【发布时间】:2010-09-09 15:52:15
【问题描述】:

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

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

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

【问题讨论】:

  • 我无法控制收到的数据集。我唯一知道的是它包含了一切。

标签: c# asp.net


【解决方案1】:

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

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

【讨论】:

  • 澄清一下:这也适用于DataTable 已经有现有行的情况,而不仅仅是空的DataTable
【解决方案2】:

要删除所需列之后的所有列,下面的代码应该可以工作。它将在索引 10 处删除(请记住,列是从 0 开始的),直到列数为 10 或更少。

DataTable dt;
int desiredSize = 10;

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

【讨论】:

  • 只是我的 2c,我不喜欢这个解决方案,使用列索引会导致噩梦般的维护..
  • 问题包括以下语句:“..columns defined that I want..”所以这意味着所需的列甚至不一定按顺序排列,因此不能简单地说“我需要前 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);
}

【讨论】:

    【解决方案4】:

    你可以像这样选择你想要的列:

    Dim Subjects As String = "Math, English"
    Dim SubjectData As DataTable = Table.AsDataView.ToTable(True, Subjects.Split(","))
    

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 2013-03-17
      • 2017-04-08
      • 1970-01-01
      • 2015-06-13
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多