データテーブルに列が存在するかどうかを確認する方法


91

csvファイルのコンテンツで生成されたデータブルがあります。他の情報を使用して、csvの一部の列(現在はデータテーブル内)を、ユーザーが入力する必要がある情報にマップします。

最良の世界では、マッピングは常に可能です。しかし、これは現実ではありません...データテーブルの列の値をマップする前に、その列が存在するかどうかを確認する必要があります。このチェックを行わないと、ArgumentExceptionが発生します。

もちろん、これを次のようなコードで確認できます。

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

しかし、今のところ3つの列をマップする必要があり、一部またはすべてが存在する/欠落している可能性があります

列がデータテーブルに存在するかどうかを確認する良い方法はありますか?


DataSet/ を扱っていDataTableますか?その場合、テーブルのすべての列のリストについて、テーブルのColumnコレクションを確認できます。
asawyer 2013

はい、@ asawyer csvのコンテンツはデータテーブルにダンプされます。この方向を見ていきます。
レミ2013

回答:


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 2013

5
@AghilasYakoub確かに、私はそのことを忘れていました。この場合も、おそらくより良い方法です。ただし、「演算子Containsを使用できます」-演算子ではなく、メンバーメソッドです。
asawyer 2013


8

複数の列の場合、以下に示すようなコードを使用できます。これを試してみたところ、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
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.