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?


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 ()


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


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;
    }


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

if (columns.Contains("ColumnName2"))
{
   //Column2 Exists
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.