2011-01-28 36 views
6

Tôi có sẵn một DataTable có chứa hàng nghìn hàng. Có một cột được gọi là EmpID có chứa '0' cho một số hàng. Tôi muốn loại bỏ chúng từ DataTable hiện tại của tôi và muốn tạo một DataTable chính xác mới. Tôi không thể đi từng hàng kiểm tra nó vì nó chứa một lượng lớn dữ liệu. Hãy cho tôi một đề nghị để khắc phục vấn đề này.Làm cách nào để xóa các hàng khỏi bảng dữ liệu khổng lồ mà không cần lặp lại nó?

Trả lời

7

cách tốt nhất là để lọc nó tại nguồn (nếu có thể) - vì vậy nếu bạn đang tạo nó từ một db, loại trừ tất cả 0 giá trị trong truy vấn sql của bạn tự sử dụng một nơi

bắt đầu. net 2.0, ms tăng cường logic lọc trên datatable đến một mức độ lớn. vì vậy nếu bạn sử dụng dataview (trên đầu của datatable của bạn) và thêm mệnh đề where trong đó và thêm một số loại chỉ số thời gian chạy trên lĩnh vực này, nó sẽ cung cấp cho bạn kết quả mong muốn mà không looping trên tất cả hồ sơ

+0

tôi đánh giá cao câu trả lời của bạn vì đã cho tôi ý tưởng về dataview. Cảm ơn. Tôi sẽ thử cái này và quay lại u. – NayeemKhan

1

Bạn có thể sử dụng DataTable.Select("EmpID <> 0"). Điều này sẽ trả về một mảng DataRows mà bạn có thể tạo DataTable mới của mình nếu cần.

1

Không phải trước tiên có thể chọn các hàng có EmpID = 0 và sau đó chỉ lặp lại các hàng này?

 DataTable newTable = new DataTable(); 
     foreach (DataRow dr in oldTable.Select("EmpID = '0'")) { 
      newTable.Rows.Add(dr); 
      oldTable.Rows.Remove(dr); 
     } 
+0

Tôi đã bỏ lỡ rằng bạn cũng muốn di chuyển các hàng sang một bảng mới, đã cập nhật câu trả lời – Ozzy

0

Bạn có thể thử

DataRow [] temp = table.Select ("EmpID = '0'");

foreach(DataRow dr in temp) 
    { 
    table.Rows.Remove(dr); 
    } 

table.acceptchanges();

Các vấn đề liên quan