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





Помимо ограничения столбцов, выбранных для уменьшения пропускной способности и памяти:
DataTable t;
t.Columns.Remove("columnName");
t.Columns.RemoveAt(columnIndex);
Чтобы уточнить: это также работает, когда DataTable уже имеет существующие строки, а не только на пустом DataTable.
Чтобы удалить все столбцы после нужного, приведенный ниже код должен работать. Он будет удален с индексом 10 (помните, что столбцы основаны на 0), пока количество столбцов не станет 10 или меньше.
DataTable dt;
int desiredSize = 10;
while (dt.Columns.Count > desiredSize)
{
dt.Columns.RemoveAt(desiredSize);
}
только мой 2c, мне это решение не нравится, работа с индексами столбцов приводит к кошмарному обслуживанию ..
вопрос включает в себя следующее утверждение: «..колонки определены, что я хочу ..», что означает, что необходимые столбцы даже не обязательно расположены в последовательном порядке, поэтому нельзя просто сказать «Мне нужны первые 10 столбцов». Таким образом, решение должно содержать массив имен столбцов, которые он хочет, тогда мы можем исключить все остальные, не попадающие в этот «определенный» набор имен. Различные способы реализации этого; от простого цикла foreach к запросу или linq с использованием IN.
Вопрос уже отмечен как отвеченный, но я предполагаю, что в вопросе указано, что человек хочет удалить несколько столбцов из DataTable.
Вот что я сделал, когда столкнулся с той же проблемой.
string[] ColumnsToBeDeleted = { "col1", "col2", "col3", "col4" };
foreach (string ColName in ColumnsToBeDeleted)
{
if (dt.Columns.Contains(ColName))
dt.Columns.Remove(ColName);
}
У меня нет никакого контроля над набором данных, который я получаю. Единственное, что я знаю, это то, что в нем есть все.