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?


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


¿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


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


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

if (columns.Contains("ColumnName2"))
{
   //Column2 Exists
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.