2013-07-17 89 views
62

我有一個用csv文件的內容生成的datable。我使用其他信息將csv的某些列(現在位於數據表中)映射到用戶需要填寫的信息。如何檢查數據表中是否存在列

在最好的世界中,映射將是可能的。但是這不是現實......所以在我嘗試映射數據表列值之前,我需要檢查該列是否存在。如果我不做這個檢查,我有一個ArgumentException。

我當然可以用一些這樣的代碼檢查:

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

但我現在3列映射和部分或全部可能存在/缺少

有沒有好辦法檢查數據表中是否存在列?

+0

你處理一個'DataSet' /'DataTable'?如果是這樣,您可以查看錶格的Column集合以獲取表格中所有列的列表。 – asawyer

+0

是的,@asawyer csv的內容被轉儲到數據表中。我會看看這個方向。 –

+0

很高興我能幫到你。 – asawyer

回答

133

您可以使用operator Contains

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

MSDN - DataColumnCollection.Contains()

+0

你確定這是linq嗎?我沒有任何參考linq在我的代碼和這項工作 –

+0

它是簡單的操作員列 –

+0

這不是一個linq擴展方法,而是DataColumnCollection類型的成員,但也可以很好地工作。 – asawyer

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

對於您可以使用給定的below.I只是通過這一去,發現答案,檢查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; 
    } 
相關問題