2013-07-17 31 views
62

Tôi có dữ liệu được tạo với nội dung của tệp csv hay không. Tôi sử dụng thông tin khác để ánh xạ một số cột của csv (bây giờ trong datatable) để thông tin người dùng được yêu cầu để điền vào.cách kiểm tra xem cột có tồn tại trong một datatable

Trong thế giới tốt nhất, bản đồ sẽ có thể được thực hiện. Nhưng đây không phải là thực tế ... Vì vậy, trước khi tôi cố gắng ánh xạ giá trị cột có thể định giá được, tôi sẽ cần kiểm tra xem cột đó có tồn tại hay không. Nếu tôi không thực hiện kiểm tra này, tôi có một ArgumentException.

Dĩ nhiên tôi có thể kiểm tra điều này với một số mã như thế này:

try 
{ 
    //try to map here. 
} 
catch (ArgumentException) 
{ } 

nhưng tôi có bây giờ 3 cột để lập bản đồ và một số hoặc tất cả có thể được hiện/thiếu

Có cách nào tốt thế nào để kiểm tra xem một cột tồn tại trong một datatable?

+0

Bạn đang xử lý 'DataSet' /' DataTable'? Nếu vậy, bạn có thể xem bộ sưu tập Cột của bảng để biết danh sách tất cả các cột trong bảng. – asawyer

+0

Có, @asawyer nội dung của csv được bán phá giá trong một datatable. Tôi sẽ có một cái nhìn theo hướng này. –

+0

Vui vì tôi có thể giúp. – asawyer

Trả lời

133

Bạn có thể sử dụng operator Contains,

private void ContainColumn(string columnName, DataTable table) 
{ 
    DataColumnCollection columns = table.Columns;   
    if (columns.Contains(columnName)) 
    { 
     .... 
    } 
} 

MSDN - DataColumnCollection.Contains()

+0

bạn có chắc đây là LINQ không? Tôi không có bất kỳ tham chiếu đến LINQ trong mã của tôi và công việc này –

+0

Toán tử đơn giản của các cột –

+0

Đây không phải là một phương thức mở rộng LINQ, chứ không phải là thành viên của kiểu DataColumnCollection, nhưng cũng sẽ hoạt động tốt. – asawyer

51
myDataTable.Columns.Contains("col_name") 
6

Đối với nhiều cột mà bạn có thể sử dụng mã tương tự như một trao below.I chỉ đi qua này và tìm thấy câu trả lời để kiểm tra nhiều cột trong DataTable.

private bool IsAllColumnExist(DataTable tableNameToCheck, List<string> columnsNames) 
    { 
     bool iscolumnExist = true; 
     try 
     { 
      if (null != tableNameToCheck && tableNameToCheck.Columns != null) 
      { 
       foreach (string columnName in columnsNames) 
       { 
        if (!tableNameToCheck.Columns.Contains(columnName)) 
        { 
         iscolumnExist = false; 
         break; 
        } 
       } 
      } 
      else 
      { 
       iscolumnExist = false; 
      } 
     }    
     catch (Exception ex) 
     { 

     } 
     return iscolumnExist; 
    } 
Các vấn đề liên quan