【C#】データテーブルから一致するデータを取得する【DataTable】

2020年2月5日

データテーブルから一致するデータを取得(条件なし)

「dt.Select()」を使用することで、格納された全てのデータを抽出する事が可能です。

戻り値は DataRow の配列で返ってくるので

引数で受け取る場合は、 DataRow[] として受け取ります。


    // データテーブルの初期化
    DataTable dt = new DataTable();

    // データテーブルの名前を指定
    dt.TableName = "FRUIT";

    // 列追加
    dt.Columns.Add("HINMEI");
    dt.Columns.Add("SURYO");
    dt.Columns.Add("TANKA");
    dt.Columns.Add("KINGAKU");
    // 行追加
    dt.Rows.Add("りんご", "3", "50", "150");
    dt.Rows.Add("ぶどう", "1", "200", "200");
    dt.Rows.Add("みかん", "10", "30", "300");

    /* 
      今回の内容はここから
    */ 
    // データテーブルから一致するデータを取得(条件なし)
    DataRow[] drs = dt.Select();


データテーブルから一致するデータを取得(条件あり)

「dt.Select(“")」のダブルコーテーション(“")中に

文字列で条件を指定する事で、抽出するデータの絞り込みができます。

ここでは、HINMEI(品名) の 値が “ぶどう" のデータを取得しています。


    // データテーブルの初期化
    DataTable dt = new DataTable();

    // データテーブルの名前を指定
    dt.TableName = "FRUIT";

    // 列追加
    dt.Columns.Add("HINMEI");
    dt.Columns.Add("SURYO");
    dt.Columns.Add("TANKA");
    dt.Columns.Add("KINGAKU");
    // 行追加
    dt.Rows.Add("りんご", "3", "50", "150");
    dt.Rows.Add("ぶどう", "1", "200", "200");
    dt.Rows.Add("みかん", "10", "30", "300");

    /* 
      今回の内容はここから
    */ 
    // データテーブルから一致するデータを取得(条件あり)
    DataRow[] drs = dt.Select("HINMEI='ぶどう'");


データテーブルから一致するデータを取得(条件あり+ソート)

「dt.Select(“", “")」の

一つ目のダブルコーテーション(“")中に

文字列で条件を指定する事で、抽出するデータの絞り込みができます。

二つ目のダブルコーテーション(“")中に

並び順を指定する事で、指定した並び順のデータテーブルが受け取れます。

ここでは、 TANKA(単価) が 40 以上 、SURYO(数量) 順の指定をしています。


    // データテーブルの初期化
    DataTable dt = new DataTable();

    // データテーブルの名前を指定
    dt.TableName = "FRUIT";

    // 列追加
    dt.Columns.Add("HINMEI");
    dt.Columns.Add("SURYO");
    dt.Columns.Add("TANKA");
    dt.Columns.Add("KINGAKU");
    // 行追加
    dt.Rows.Add("りんご", "3", "50", "150");
    dt.Rows.Add("ぶどう", "1", "200", "200");
    dt.Rows.Add("みかん", "10", "30", "300");

    /* 
      今回の内容はここから
    */ 
    // データテーブル内のデータ検索(条件あり+ソート)
    DataRow[] drs = dt.Select("TANKA>40", "SURYO");


DataRow[] を受け取った後

Select で データを抽出した後の DataRow[] の使い方をさらりと説明します。

Select で 2件のデータ抽出ができたと仮定します。

一つ目は、2行目のデータを DataRow に 受け渡すことを想定しています。

二つ目は、foreach を使用して抽出したデータ全てをループ処理しています。


    // データテーブルの初期化
    DataTable dt = new DataTable();

    // データテーブルの名前を指定
    dt.TableName = "FRUIT";

    // 列追加
    dt.Columns.Add("HINMEI");
    dt.Columns.Add("SURYO");
    dt.Columns.Add("TANKA");
    dt.Columns.Add("KINGAKU");
    // 行追加
    dt.Rows.Add("りんご", "3", "50", "150");
    dt.Rows.Add("ぶどう", "1", "200", "200");
    dt.Rows.Add("みかん", "10", "30", "300");

    /* 
      今回の内容はここから
    */ 
    // DataRow[] を受け取った後
    DataRow[] drs = dt.Select("TANKA>40", "SURYO");
    // 2行目のデータを DataRow に 受け渡すことを想定しています。
    DataRow dr = drs[1];
    
    // foreach を使用して抽出したデータ全てをループ処理しています。
    foreach (DataRow d in drs)
    {
        Console.WriteLine(d["HINMEI"]);
    }

コピペですぐ試せるソースコード

上記で記載した3点のソースコードをまとめました。

ソースコードをコピペするとそれぞれの動作が確認できると思います。


        private void DataTable_Get_Row_Item()
        {
            DataTable dt = new DataTable();

            // データテーブルの名前を指定
            dt.TableName = "FRUIT";

            // 列追加
            dt.Columns.Add("HINMEI");
            dt.Columns.Add("SURYO");
            dt.Columns.Add("TANKA");
            dt.Columns.Add("KINGAKU");
            // 行追加
            dt.Rows.Add("りんご", "3", "50", "150");
            dt.Rows.Add("ぶどう", "1", "200", "200");
            dt.Rows.Add("みかん", "10", "30", "300");

            /* 
              今回の内容はここから
            */ 
       DataRow[] dr;

            // データテーブルから一致するデータを取得(条件なし)
            dr = dt.Select();
            
            // データテーブルから一致するデータを取得(条件あり)
       dr = dt.Select("HINMEI='ぶどう'");

            // データテーブルから一致するデータを取得(条件あり+ソート)
            dr = dt.Select("TANKA>40", "SURYO");

            // DataRow[] を受け取った後
            // 2行目のデータを DataRow に 受け渡すことを想定しています。
            DataRow dr = drs[1];
    
            // foreach を使用して抽出したデータ全てをループ処理しています。
            foreach (DataRow d in drs)
            {
                Console.WriteLine(d["HINMEI"]);
            }
        }

まとめ

データテーブルを使用するにあたって、Select は結構使う機会が多いと思います。

今回は記載していませんが、複数条件を加えたり、並び順を(ASC/DESC)指定することも可能です。

詳しく知りたい方は公式のHPをご参考にしてください。

用途にあったやり方、自分のやりやすい実装を採用していきましょう。


Microsoft 公式ページ

DataTable.Select メソッド
https://docs.microsoft.com/ja-jp/dotnet/api/system.data.datarowcollection?view=netframework-4.0


お問い合わせ先

Twitterの利用再開しましたのでお問い合わせのある方はTwitterまでご連絡ください。