Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查数据表中是否存在列_C#_Datatable_Argumentexception - Fatal编程技术网

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

C# 如何检查数据表中是否存在列,c#,datatable,argumentexception,C#,Datatable,Argumentexception,我用csv文件的内容生成了一个数据表。我使用其他信息将csv的某些列(现在在数据表中)映射到用户需要填写的信息 在最好的世界里,映射总是可能的。但这不是现实。。。因此,在尝试映射datatable列值之前,我需要检查该列是否存在。如果我不做这个检查,我有一个例外 当然,我可以用如下代码检查: try { //try to map here. } catch (ArgumentException) { } 但我现在有3列要映射,其中一些或全部可能存在/缺失 是否有一种好方法可以检查数据表

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

在最好的世界里,映射总是可能的。但这不是现实。。。因此,在尝试映射datatable列值之前,我需要检查该列是否存在。如果我不做这个检查,我有一个例外

当然,我可以用如下代码检查:

try
{
    //try to map here.
}
catch (ArgumentException)
{ }
但我现在有3列要映射,其中一些或全部可能存在/缺失


是否有一种好方法可以检查数据表中是否存在列?

您可以使用
运算符Contains

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

您可以查看给定
数据表的
属性,它是表中所有列的列表

private void PrintValues(DataTable table)
{
    foreach(DataRow row in table.Rows)
    {
        foreach(DataColumn column in table.Columns)
        {
            Console.WriteLine(row[column]);
        }
    }
}

对于多列,您可以使用与下面给出的代码类似的代码。我刚刚浏览了一下,找到了检查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;
    }
private bool IsAllColumnExist(数据表tablename检查,列表列名称)
{
bool iscolumnExist=true;
尝试
{
if(null!=tableNameToCheck&&tableNameToCheck.Columns!=null)
{
foreach(columnsNames中的字符串columnName)
{
如果(!tableNameToCheck.Columns.Contains(columnName))
{
iscolumnExist=false;
打破
}
}
}
其他的
{
iscolumnExist=false;
}
}            
捕获(例外情况除外)
{
}
返回iscolumnExist;
}

使用IndexOf更准确:

If dt.Columns.IndexOf("ColumnName") = -1 Then
    'Column not exist
End If

如果使用Contains,则不会区分ColumName和COLUMNAME2。

基于已接受的答案,我使用扩展方法检查表中的列是否存在

我对谁也有同感

 public static class DatatableHelper
 {
        public static bool ContainColumn(this DataTable table, string columnName)
        {
            DataColumnCollection columns = table.Columns;
            if (columns.Contains(columnName))
            {
                return true;
            }

            return false;
        }
}

并用作
dtTagData.ContainColumn(“系统名”)

您正在处理
数据集
/
数据表
?如果是这样,您可以查看该表的列集合以获取该表中所有列的列表。是的,@asawyer csv的内容将转储到datatable中。我会朝这个方向看一看。你确定这是林克吗?我的代码中没有任何对linq的引用,这个workit的简单列运算符这不是一个linq扩展方法,而是DataColumnCollection类型的一个成员,但也可以很好地工作。@AghilasYakoub当然是,我忘了那个了。在这种情况下,可能也是更好的方式。但有一件事,“您可以使用运算符Contains”-它不是运算符,而是成员方法。Contains没有您描述的行为。它不像字符串。包含。更多的是“我的集合是否包含具有此名称的列?”而不是“我的集合是否包含具有包含此名称的列?”越少越好。。。
If dt.Columns.IndexOf("ColumnName") = -1 Then
    'Column not exist
End If
 public static class DatatableHelper
 {
        public static bool ContainColumn(this DataTable table, string columnName)
        {
            DataColumnCollection columns = table.Columns;
            if (columns.Contains(columnName))
            {
                return true;
            }

            return false;
        }
}