2013-07-17 13 views
62

私はcsvファイルの内容で生成されたデータを持っています。私は他の情報を使用して、csvのある列(現在のデータテーブル内)をユーザーが入力する必要のある情報にマップします。データテーブルに列が存在するかどうかをチェックする方法

最高の世界では、マッピングは常に可能です。しかし、これは現実的ではありません...私はdatatable列の値をマップしようとする前に、私はその列が存在するかどうかを確認する必要があります。私はこのチェックをしない場合、私はArgumentExceptionを持っています。

もちろん私はこのようないくつかのコードでこれを確認することができます。

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

が、今3列がマップするために、いくつかまたは全てが

を逃す/既存のかもしれないために私が持っている良い方法はあります列がデータテーブルに存在するかどうかを確認する

+0

あなたは 'DataSet' /' DataTable'を扱っていますか?その場合は、表の列コレクションを参照して、表のすべての列のリストを確認します。 – asawyer

+0

はい、csvの内容はデータテーブルにダンプされます。私はこの方向で見ていきます。 –

+0

うれしい私は助けることができました。 – asawyer

答えて

133

あなたが与えられたDataTableColumnsプロパティを見ることができます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; 
    } 
関連する問題