Видалення стовпців із таблиці даних у C #


113

У мене є набір даних, який отримую таблицю даних з того, що мені передається з виклику функції. Він містить 15-20 стовпців, проте я хочу лише 10 стовпців даних.

Чи є спосіб видалити ці стовпці, які я не хочу, скопіюйте DataTable в інший, у якому визначені лише стовпці, які я хочу, або це просто краще відібрати колекцію та просто використовувати потрібні стовпці.

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


У мене немає контролю над набором даних, які я отримую. Єдине, що я знаю, це те, що воно містить усе.
Брайан Г

Відповіді:


302

Крім обмеження вибраних стовпців для зменшення пропускної здатності та пам’яті:

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

13
Просто для уточнення: Це також працює, коли DataTableвже є рядки, а не лише в порожньому DataTable.
Уве Кеїм

23

Щоб видалити всі стовпці після потрібного, нижче код повинен працювати. Він видаляється за індексом 10 (пам'ятайте, що стовпці базуються на 0), поки кількість стовпців не дорівнює 10 або менше.

DataTable dt;
int desiredSize = 10;

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

1
просто мій 2с, мені не подобається це рішення, робота з індексами стовпців призводить до обслуговування кошмарів ..
Роберто

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);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.