データテーブルにnull値が含まれているかどうかを確認する最良の方法


87

データテーブルにnull値が含まれているかどうかを確認する最良の方法は何ですか?

このシナリオでは、ほとんどの場合、1つの列にすべてnull値が含まれます。

(このデータテーブルはサードパーティのアプリケーションによって返されます-アプリケーションがデータテーブルを処理する前に検証を加えようとしています)


回答:


164

列の値を値と比較して、DBNull.Value適切と思われる方法でnull値をフィルタリングおよび管理してみてください。

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

DBNullクラスに関する詳細情報


テーブルにnull値が存在するかどうかを確認する場合は、次の方法を使用できます。

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

これを書くことができます:

table.HasNull();

1
この拡張メソッドをどこに配置するかについてのベストプラクティスは何ですか?
StuperUser 2011年

6
私は通常、いくつかの一般的なライブラリまたはDALに「Extensions」フォルダを作成します。「DataTableExtensions.cs」というファイルを作成し、そのメソッドを追加します。次に、「using Name.Space.Extensions」をcsファイルに追加するだけで、定義されているすべての拡張メソッドにアクセスできます。
ハンター

3
table.AsEnumerable()代わりに(現在)使用できますtable.Rows.OfType<DataRow>()
Teejay 2016

23
foreach(DataRow row in dataTable.Rows)
{
    if(row.IsNull("myColumn"))
        throw new Exception("Empty value!")
}

11

行と列をループスローし、nullをチェックし、ブール値でnullがあるかどうかを追跡し、テーブルをループして処理した後にチェックすることができます。

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

テーブルの残りの部分をループするのを防ぐため。



0

LinQを使用してEtc値をnull /空白/スペースにすることができます次のクエリを使用

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

ここでは交換してくださいCOLUMNNAMEをテーブルの列名として「」我々はNULL値を見て、上記のコードでは、あなたの検索項目。


0
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)
{
    if (dr["Column_Name"] == DBNull.Value)
    {
        //Do something
    }
    else
    {
        //Do something
    }
}

5
このコードは質問に答えることができますが、問題を解決する方法を説明し、例または参照としてコードを提供することをお勧めします。コードのみの回答は混乱を招き、コンテキストが不足している可能性があります。
ロバートコロンビア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.