Удалить столбцы из DataTable в C #

113

У меня есть DataSet, из которого я получаю DataTable, который мне передают из вызова функции. Он имеет 15-20 столбцов, однако мне нужно только 10 столбцов данных.

Есть ли способ удалить те столбцы, которые мне не нужны, скопировать DataTable в другой, в котором определены только те столбцы, которые я хочу, или просто лучше перебрать коллекцию и просто использовать нужные мне столбцы.

Мне нужно записать значения в файл данных фиксированной длины.

Брайан Джи
источник
У меня нет никакого контроля над набором данных, который я получаю. Единственное, что я знаю, это то, что он содержит все.
Брайан Джи,

Ответы:

302

Помимо ограничения столбцов, выбранных для уменьшения пропускной способности и памяти:

DataTable t;
t.Columns.Remove("columnName");
t.Columns.RemoveAt(columnIndex);
Том Риттер
источник
13
Чтобы уточнить: это также работает, когда DataTableуже есть существующие строки, а не только на пустом DataTable.
Уве Кейм
24

Чтобы удалить все столбцы после нужного, приведенный ниже код должен работать. Он будет удален с индексом 10 (помните, что столбцы основаны на 0), пока количество столбцов не станет 10 или меньше.

DataTable dt;
int desiredSize = 10;

while (dt.Columns.Count > desiredSize)
{
   dt.Columns.RemoveAt(desiredSize);
}
Тимоти Картер
источник
1
только мой 2c, мне не нравится это решение, работа с индексами столбцов приводит к кошмарному обслуживанию ..
Роберто
1
вопрос включает в себя следующее утверждение: «..колонки определены, что я хочу ..», что означает, что необходимые столбцы даже не обязательно расположены в последовательном порядке, поэтому нельзя просто сказать «Мне нужны первые 10 столбцов». Таким образом, решение должно содержать массив имен столбцов, которые он хочет, тогда мы можем исключить все остальные, не попадающие в этот «определенный» набор имен. Различные способы реализации этого; от простого цикла foreach к запросу или linq с использованием IN.
Роберто
3

Вопрос уже отмечен как отвеченный, но я предполагаю, что в вопросе указано, что человек хочет удалить несколько столбцов из DataTable.

Вот что я сделал, когда столкнулся с той же проблемой.

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

foreach (string ColName in ColumnsToBeDeleted)
{
    if (dt.Columns.Contains(ColName))
        dt.Columns.Remove(ColName);
}
SU7
источник