如何检查数据表中是否存在列


91

我有一个用csv文件的内容生成的datable。我使用其他信息将csv的某些列(现在在数据表中)映射到要求用户填写的信息。

在最好的情况下,映射始终是可能的。但这不是现实。因此,在尝试映射数据表列值之前,我需要检查该列是否存在。如果不执行此检查,则会收到ArgumentException。

当然,我可以使用类似以下代码的代码进行检查:

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

但我现在有3列要映射,有些或全部可能存在/缺失

有没有一种好的方法来检查数据表中是否存在列?


您在处理DataSet/ DataTable吗?如果是这样,您可以查看表的Column集合以获取表中所有列的列表。
asawyer

是的,@ asawyer将csv的内容转储到数据表中。我将朝这个方向看一看。
雷米

Answers:


192

您可以使用operator Contains

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

MSDN-DataColumnCollection.Contains()


您确定这是linq吗?我没有在我的代码,以LINQ任何参考这方面的工作
雷米

它是简单的列运算符
Aghilas Yakoub 2013年

这不是linq扩展方法,而是DataColumnCollection类型的成员,但也可以很好地工作。
asawyer

5
@AghilasYakoub当然可以,我忘了那个。在这种情况下,可能也是更好的方法。不过,有一件事,“您可以使用运算符Contains”-它不是运算符,而是成员方法。
asawyer


8

对于多列,您可以使用类似于以下代码的代码。

 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
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.