2013-07-17 5 views
62

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

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

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

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

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

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

+0

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

+0

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

+0

Рад, что я мог бы помочь. – asawyer

ответ

133

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

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

MSDN - DataColumnCollection.Contains()

+0

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

+0

это оператор, простой из столбцов –

+0

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

6

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