Как проверить, существует ли столбец в таблице данных

У меня есть datable, сгенерированный с содержимым файла csv. Я использую другую информацию для сопоставления некоторого столбца csv (теперь в datatable) с информацией, которую пользователь должен заполнить.

В лучшем мире отображение будет всегда возможным. Но это не реальность... Поэтому, прежде чем попытаться сопоставить значение столбца данных, мне нужно будет проверить, существует ли этот столбец. Если я не сделаю эту проверку, у меня есть исключение ArgumentException.

Конечно, я могу проверить это с помощью некоторого кода:

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

но теперь у меня есть 3 столбца для сопоставления и некоторые или все могут существовать/отсутствовать

Есть ли хороший способ проверить, существует ли столбец в datatable?

Ответ 1

Вы можете использовать operator Contains,

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

MSDN - DataColumnCollection.Contains()

Ответ 2

myDataTable.Columns.Contains("col_name")

Ответ 3

Для нескольких столбцов вы можете использовать код, похожий на один приведенный ниже. Я просто прошел через это и нашел ответ, чтобы проверить несколько столбцов в 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;
    }

Ответ 4

Вы можете посмотреть свойство Columns данного DataTable, это список всех столбцов в таблице.

private void PrintValues(DataTable table)
{
    foreach(DataRow row in table.Rows)
    {
        foreach(DataColumn column in table.Columns)
        {
            Console.WriteLine(row[column]);
        }
    }
}

http://msdn.microsoft.com/en-us/library/system.data.datatable.columns.aspx

Ответ 5

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

if (columns.Contains("ColumnName2"))
{
   //Column2 Exists
}