C # 'da DataTable'dan sütunları kaldırın


113

Bir DataTable aldığım bir DataSet'im var ve bir işlev çağrısından geri aktarılıyorum. 15-20 sütunu var, ancak verilerin yalnızca 10 sütununu istiyorum.

İstemediğim bu sütunları kaldırmanın bir yolu var mı, DataTable'ı yalnızca istediğim sütunların tanımlandığı başka birine kopyalayın mı yoksa koleksiyonu yinelemek ve sadece ihtiyacım olan sütunları kullanmak daha mı iyi?

Değerleri sabit uzunlukta bir veri dosyasına yazmam gerekiyor.


Aldığım veri kümesi üzerinde herhangi bir kontrolüm yok. Bildiğim tek şey, her şeyi içerdiği.
Brian G

Yanıtlar:


302

Bant genişliğini ve belleği azaltmak için seçilen sütunları sınırlamanın yanı sıra:

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

13
Sadece açıklığa kavuşturmak için: Bu DataTable, yalnızca boş bir satırda değil , zaten mevcut satırlara sahip olduğunda da çalışır DataTable.
Uwe Keim

23

İstediğiniz sütundan sonraki tüm sütunları kaldırmak için aşağıdaki kodun çalışması gerekir. Sütun sayısı 10 veya daha az olana kadar dizin 10'da kaldırılacaktır (Sütunların 0 temelli olduğunu unutmayın).

DataTable dt;
int desiredSize = 10;

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

1
sadece benim 2c, bu çözümü sevmiyorum, sütun indeksleri ile çalışmak kabus bakımına yol açar ..
Roberto

1
soru şu ifadeyi içerir: "..İstediğim sütunlar tanımlandı ..", bu, gerekli sütunların zorunlu olarak sıralı sıraya sahip olmadığı anlamına gelir, bu nedenle yalnızca "ilk 10 sütuna ihtiyacım var" denemez. Çözümün istediği sütun isimleri dizisini içermesi gerektiğinden, bu "tanımlı" isimler kümesine girmeyen tüm diğerlerini eleyebiliriz. Bunu uygulamanın farklı yolları; basit foreach döngüsünden IN kullanarak sorgu veya linq'e.
Roberto

3

Soru zaten yanıtlandı olarak işaretlendi, Ama sanırım soru, kişinin a'dan birden fazla sütunu kaldırmak istediğini belirtiyor DataTable.

İşte bunun için, aynı problemle karşılaştığımda yaptığım şey bu.

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

foreach (string ColName in ColumnsToBeDeleted)
{
    if (dt.Columns.Contains(ColName))
        dt.Columns.Remove(ColName);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.