Como verificar se existe uma coluna em uma tabela de dados

91

Eu tenho um datable gerado com o conteúdo de um arquivo csv. Eu uso outras informações para mapear alguma coluna do csv (agora na tabela de dados) para informações que o usuário deve preencher.

No melhor mundo, o mapeamento seria sempre possível. Mas isso não é realidade ... Então, antes de tentar mapear o valor da coluna da tabela de dados, eu precisaria verificar se essa coluna existe. Se eu não fizer essa verificação, terei uma ArgumentException.

Claro que posso verificar isso com algum código como este:

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

mas tenho, por enquanto, 3 colunas para mapear e algumas ou todas podem estar existentes / ausentes

Existe uma boa maneira de verificar se existe uma coluna em uma tabela de dados?

Rémi
fonte
Você está lidando com um DataSet/ DataTable? Nesse caso, você pode consultar a coleção de colunas da tabela para obter uma lista de todas as colunas da tabela.
advogado de
Sim, @asawyer, o conteúdo do csv é despejado em uma tabela de dados. Vou dar uma olhada nessa direção.
Rémi

Respostas:

192

Você pode usar operator Contains,

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

MSDN - DataColumnCollection.Contains ()

Aghilas Yakoub
fonte
tem certeza que este é o linq? Não tenho nenhuma referência a linq em meu código e neste trabalho
Rémi
é operador simples de colunas
Aghilas Yakoub
Este não é um método de extensão linq, e sim um membro do tipo DataColumnCollection, mas também funcionaria bem.
advogado de
5
@AghilasYakoub Claro, esqueci-me desse. Provavelmente, a melhor maneira de proceder neste caso também. Porém, uma coisa: "Você pode usar o operador Contém" - não é um operador, é um método de membro.
advogado de
74
myDataTable.Columns.Contains("col_name")
adinas
fonte
8

Para várias colunas, você pode usar um código semelhante a um dado abaixo. Eu estava apenas passando por isso e encontrei uma resposta para verificar várias colunas na tabela de dados.

 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
fonte
0

Você pode olhar para a Columnspropriedade de um dado DataTable, é uma lista de todas as colunas da tabela.

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

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

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