2013-07-17 20 views
62

Ho un datable generato con il contenuto di un file csv. Uso altre informazioni per mappare alcune colonne di csv (ora nel datatable) alle informazioni che l'utente è tenuto a compilare.come verificare se esiste una colonna in un datatable

Nel mondo migliore la mappatura sarebbe stata sempre possibile. Ma questa non è la realtà ... Quindi, prima di provare a mappare il valore della colonna datatable, dovrei controllare se questa colonna esiste. Se non lo faccio, ho una ArgumentException.

Certo che posso controllare questo con un certo codice come questo:

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

ma non ho per ora 3 colonne di mappa e alcuni o tutti potrebbero essere esistenti/mancante

C'è un buon modo per verificare se esiste una colonna in un datatable?

+0

Si tratta di un 'DataSet' /' DataTable'? In tal caso, puoi consultare la collezione di colonne della tabella per un elenco di tutte le colonne nella tabella. – asawyer

+0

Sì, @asawyer il contenuto di csv viene scaricato in un datatable. Guiderò in questa direzione. –

+0

Contento di aver potuto aiutare. – asawyer

risposta

133

È possibile utilizzare operator Contains,

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

MSDN - DataColumnCollection.Contains()

+0

sei sicuro che questo è linq? Non ho alcun riferimento a linq nel mio codice e questo lavoro –

+0

è semplice operatore di colonne –

+0

Questo non è un metodo di estensione linq, piuttosto un membro del tipo DataColumnCollection, ma funzionerebbe anche bene. – asawyer

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

Per le colonne multiple è possibile utilizzare codice simile a quello dato below.I stava solo passando attraverso questo ed ha trovato risposta a controllare più colonne in 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; 
    }