Xóa các cột khỏi DataTable trong C #


113

Tôi có một DataSet mà tôi nhận được một DataTable mà từ đó tôi được trả về từ một lệnh gọi hàm. Nó có 15-20 cột, tuy nhiên tôi chỉ muốn 10 cột dữ liệu.

Có cách nào để loại bỏ các cột mà tôi không muốn, sao chép DataTable sang một bảng khác chỉ có các cột được xác định mà tôi muốn hay tốt hơn là lặp lại bộ sưu tập và chỉ sử dụng các cột tôi cần.

Tôi cần ghi các giá trị ra tệp dữ liệu có độ dài cố định.


Tôi không có bất kỳ quyền kiểm soát nào đối với tập dữ liệu tôi nhận được. Điều duy nhất tôi biết là nó chứa tất cả mọi thứ.
Brian G

Câu trả lời:


302

Ngoài việc giới hạn các cột được chọn để giảm băng thông và bộ nhớ:

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

13
Chỉ cần làm rõ: Điều này cũng hoạt động khi các hàng DataTableđã có sẵn, không chỉ trên hàng trống DataTable.
Uwe Keim

23

Để xóa tất cả các cột sau cột bạn muốn, mã bên dưới sẽ hoạt động. Nó sẽ xóa ở chỉ mục 10 (hãy nhớ Cột dựa trên 0), cho đến khi số lượng Cột là 10 hoặc ít hơn.

DataTable dt;
int desiredSize = 10;

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

1
chỉ 2c của tôi, tôi không thích giải pháp này, làm việc với chỉ số cột dẫn đến bảo trì cơn ác mộng ..
Roberto

1
câu hỏi bao gồm tuyên bố sau: "..các cột được xác định mà tôi muốn ..", điều đó có nghĩa là các cột cần thiết thậm chí không nhất thiết phải theo thứ tự tuần tự nên người ta không thể chỉ đơn giản nói "Tôi cần 10 cột đầu tiên". Như vậy, giải pháp phải chứa một mảng tên cột mà anh ta muốn, sau đó chúng ta có thể loại bỏ tất cả những tên khác không thuộc tập hợp tên được "xác định" này. Các cách khác nhau để thực hiện điều này; từ vòng lặp foreach đơn giản đến truy vấn hoặc linq sử dụng IN.
Roberto

3

Câu hỏi đã được đánh dấu là đã trả lời, Nhưng tôi đoán câu hỏi nói rằng người đó muốn xóa nhiều cột khỏi a DataTable.

Vì vậy, đây là những gì tôi đã làm, khi tôi gặp phải vấn đề tương tự.

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

foreach (string ColName in ColumnsToBeDeleted)
{
    if (dt.Columns.Contains(ColName))
        dt.Columns.Remove(ColName);
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.