Come verificare se una colonna esiste in un datatable


91

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

Nel miglior mondo la mappatura sarebbe sempre possibile. Ma questa non è la realtà ... Quindi, prima di provare a mappare il valore della colonna databile, dovrei controllare se quella colonna esiste. Se non eseguo questo controllo ho un'eccezione ArgumentException.

Ovviamente posso verificarlo con un codice come questo:

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

ma per ora ho 3 colonne da mappare e alcune o tutte potrebbero essere esistenti / mancanti

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


Hai a che fare con un DataSet/ DataTable? In tal caso, puoi esaminare la raccolta di colonne della tabella per un elenco di tutte le colonne nella tabella.
avvocato

Sì, @asawyer il contenuto del csv viene scaricato in un datatable. Avrò uno sguardo in questa direzione.
Rémi

Risposte:


192

Puoi usare operator Contains,

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

MSDN - DataColumnCollection.Contains ()


sei sicuro che questo sia linq? Non ho alcun riferimento a linq nel mio codice e in questo lavoro
Rémi

è semplice operatore di colonne
Aghilas Yakoub

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

5
@AghilasYakoub Certo, me ne sono dimenticato. Probabilmente anche in questo caso il modo migliore di procedere. Una cosa però: "Puoi usare l'operatore Contains": non è un operatore, è un metodo membro.
avvocato


8

Per più colonne è possibile utilizzare un codice simile a quello indicato di seguito. Stavo solo esaminando questo e ho trovato la risposta per 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;
    }


0
DataColumnCollection col = datatable.Columns;        
if (!columns.Contains("ColumnName1"))
{
   //Column1 Not Exists
}

if (columns.Contains("ColumnName2"))
{
   //Column2 Exists
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.