Cómo comprobar si existe una columna en una tabla de datos

91

Tengo un datable generado con el contenido de un archivo csv. Utilizo otra información para asignar alguna columna del csv (ahora en la tabla de datos) a la información que el usuario debe completar.

En el mejor mundo, el mapeo sería siempre posible. Pero esto no es la realidad ... Entonces, antes de intentar mapear el valor de la columna de la tabla de datos, necesitaría verificar si esa columna existe. Si no hago esta verificación, tengo una ArgumentException.

Por supuesto que puedo verificar esto con un código como este:

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

pero por ahora tengo 3 columnas para mapear y algunas o todas pueden estar existentes / faltantes

¿Existe una buena forma de comprobar si existe una columna en una tabla de datos?

Rémi
fuente
¿Estás tratando con un DataSet/ DataTable? Si es así, puede buscar en la colección de columnas de la tabla una lista de todas las columnas de la tabla.
asawyer
Sí, @asawyer, el contenido del csv se descarga en una tabla de datos. Echaré un vistazo en esta dirección.
Rémi

Respuestas:

192

Puedes usar operator Contains,

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

MSDN - DataColumnCollection.Contains ()

Aghilas Yakoub
fuente
¿Estás seguro de que esto es linq? No tengo ninguna referencia a linq en mi código y este trabajo
Rémi
es operador simple de columnas
Aghilas Yakoub
Este no es un método de extensión linq, sino un miembro del tipo DataColumnCollection, pero también funcionaría bien.
asawyer
5
@AghilasYakoub Seguro que me olvidé de ese. Probablemente la mejor manera de hacerlo también en este caso. Sin embargo, una cosa, "Puede usar el operador Contiene": no es un operador, es un método de miembro.
asawyer
74
myDataTable.Columns.Contains("col_name")
adinas
fuente
8

Para varias columnas, puede usar un código similar al que se proporciona a continuación. Estaba revisando esto y encontré la respuesta para verificar varias columnas en 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;
    }
lokendra jayaswal
fuente
0
DataColumnCollection col = datatable.Columns;        
if (!columns.Contains("ColumnName1"))
{
   //Column1 Not Exists
}

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