Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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#_.net_Validation_Datatable_Null - Fatal编程技术网

C# 检查数据表中是否有空值的最佳方法

C# 检查数据表中是否有空值的最佳方法,c#,.net,validation,datatable,null,C#,.net,Validation,Datatable,Null,检查数据表中是否有空值的最佳方法是什么 在我们的场景中,大多数情况下,一列将具有所有空值 (此数据表由第三方应用程序返回-我们正在尝试在应用程序处理数据表之前设置有效值)尝试将列的值与DBNull.value值进行比较,以您认为合适的方式筛选和管理空值 foreach(DataRow row in table.Rows) { object value = row["ColumnName"]; if (value == DBNull.Value) // do som

检查数据表中是否有空值的最佳方法是什么

在我们的场景中,大多数情况下,一列将具有所有空值


(此数据表由第三方应用程序返回-我们正在尝试在应用程序处理数据表之前设置有效值)

尝试将列的值与
DBNull.value
值进行比较,以您认为合适的方式筛选和管理空值

foreach(DataRow row in table.Rows)
{
    object value = row["ColumnName"];
    if (value == DBNull.Value)
        // do something
    else
        // do something else
}


如果要检查表中是否存在空值,可以使用以下方法:

public static bool HasNull(this DataTable table)
{
    foreach (DataColumn column in table.Columns)
    {
        if (table.Rows.OfType<DataRow>().Any(r => r.IsNull(column)))
            return true;
    }

    return false;
}

您可以循环抛出行和列,检查空值,用bool跟踪是否有空值,然后在循环表并处理它之后检查它

//your DataTable, replace with table get code
DataTable table = new DataTable();
bool tableHasNull = false;

foreach (DataRow row in table.Rows)
{
    foreach (DataColumn col in table.Columns)
    {
        //test for null here
        if (row[col] == DBNull.Value)
        {
            tableHasNull = true;
        }
    }
}

if (tableHasNull)
{
    //handle null in table
}

您还可以使用break语句从foreach循环中退出,例如

//test for null here
if (row[col] == DBNull.Value)
{
    tableHasNull = true;
    break;
}
保存通过表的其余部分的循环。

我会像

(!DBNull.Value.Equals(dataSet.Tables[6].Rows[0]["_id"]))

您可以使用LinQ为null/blank/space等值 使用以下查询

   var BlankValueRows = (from dr1 in Dt.AsEnumerable()
                                  where dr1["Columnname"].ToString() == ""
                                  || dr1["Columnname"].ToString() == ""
                                   || dr1["Columnname"].ToString() == ""
                                  select Columnname);

这里用表列名替换Columnname“您的搜索项在上面的代码中看起来是空值。

这种扩展方法的最佳做法是什么?我通常在一些公共库或DAL中创建一个“Extensions”文件夹。创建一个名为“DataTableExtensions.cs”的文件并添加该方法。接下来,您只需将“using Name.Space.Extensions”添加到您的cs文件中,并可以访问所有定义的扩展方法。您可以(现在)使用
table.AsEnumerable()
,而不是
table.Rows.OfType()
的可能重复项,而此代码可以回答问题,最好解释如何解决问题,并提供代码作为示例或参考。只有代码的答案可能会令人困惑,并且缺乏上下文。
(!DBNull.Value.Equals(dataSet.Tables[6].Rows[0]["_id"]))
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)
{
    if (dr["Column_Name"] == DBNull.Value)
    {
        //Do something
    }
    else
    {
        //Do something
    }
}
   var BlankValueRows = (from dr1 in Dt.AsEnumerable()
                                  where dr1["Columnname"].ToString() == ""
                                  || dr1["Columnname"].ToString() == ""
                                   || dr1["Columnname"].ToString() == ""
                                  select Columnname);