Jak sprawdzić, czy kolumna istnieje w pliku danych

93

Mam datable wygenerowany z zawartością pliku csv. Używam innych informacji, aby zmapować jakąś kolumnę csv (teraz w pliku datatable) na informacje, które użytkownik musi wypełnić.

W najlepszym świecie mapowanie byłoby zawsze możliwe. Ale to nie jest rzeczywistość ... Więc zanim spróbuję zmapować wartość kolumny datatable, musiałbym sprawdzić, czy ta kolumna w ogóle istnieje. Jeśli tego nie zrobię, sprawdź, czy mam ArgumentException.

Oczywiście mogę to sprawdzić za pomocą takiego kodu:

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

ale mam na razie 3 kolumny do zmapowania i niektóre lub wszystkie mogą istnieć / brakować

Czy istnieje dobry sposób sprawdzenia, czy kolumna istnieje w pliku danych?

Rémi
źródło
Czy masz do czynienia z DataSet/ DataTable? Jeśli tak, możesz przejrzeć kolekcję Kolumny tabeli, aby znaleźć listę wszystkich kolumn w tabeli.
asawyer 17.07.13
Tak, @asawyer zawartość pliku csv jest umieszczana w pliku datatable. Spojrzę w tym kierunku.
Rémi

Odpowiedzi:

196

Możesz użyć operator Contains,

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

MSDN - DataColumnCollection.Contains ()

Aghilas Yakoub
źródło
czy na pewno to jest linq? Nie mam żadnego odniesienia do linq w moim kodzie i tej pracy
Rémi
to prosty operator z kolumnami
Aghilas Yakoub
To nie jest metoda rozszerzenia linq, a raczej element członkowski typu DataColumnCollection, ale również działałaby dobrze.
asawyer 17.07.13
5
@AghilasYakoub Jasne, zapomniałem o tym. Prawdopodobnie lepszy sposób na rozwiązanie również w tym przypadku. Jedna rzecz jednak: „Możesz użyć operatora Contains” - to nie jest operator, to metoda składowa.
asawyer 17.07.13
75
myDataTable.Columns.Contains("col_name")
adinas
źródło
8

Dla wielu kolumn możesz użyć kodu podobnego do podanego poniżej. Właśnie przez to przejrzałem i znalazłem odpowiedź, aby sprawdzić wiele kolumn w 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;
    }
lokendra jayaswal
źródło
0
DataColumnCollection col = datatable.Columns;        
if (!columns.Contains("ColumnName1"))
{
   //Column1 Not Exists
}

if (columns.Contains("ColumnName2"))
{
   //Column2 Exists
}
Boopathi.Indotnet
źródło