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


93

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

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

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

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

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

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


Вы имеете дело с DataSet/ DataTable? Если это так, вы можете посмотреть в коллекции столбцов таблицы список всех столбцов в таблице.
asawyer

Да, @asawyer содержимое csv сбрасывается в datatable. Я посмотрю в этом направлении.
Реми

Ответы:


196

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

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

MSDN - DataColumnCollection.Contains ()


ты уверен, что это linq? У меня нет ссылок на linq в моем коде и в этой работе
Реми

это простой оператор столбцов
Агилас Якоуб

Это не метод расширения linq, а скорее член типа DataColumnCollection, но он также будет хорошо работать.
asawyer

5
@AghilasYakoub Конечно, я забыл об этом. Наверное, и в этом случае лучший выход. Одно но: «Вы можете использовать оператор Contains» - это не оператор, это метод-член.
asawyer


8

Для нескольких столбцов вы можете использовать код, аналогичный приведенному ниже. Я только что просмотрел это и нашел ответ, чтобы проверить несколько столбцов в 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
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.