【C#】foreachを使ってデータテーブルから行を取得する【DataTable】

2020年2月10日

foreachで行を取得する(DataRow)

今回のループ処理は foreach文を使用します。

foreach 文の指定は、以下の内容とします。

・ foreach (DataRow dr in dt.Rows)

for と何が違うのか。

for では、「DataRow dr = dt.Rows[i];」 と指定して DataRow を取得していましたが、

foreachでは、上記の「DataRow dr = dt.Rows[i]」が 必要なく、

そのままループ処理内で dr を使用できます。

「(DataRow dr in DataRow」 は「DataRow dr = dt.Rows[i]」の

手間を1つ減らしたものと考えていいと思います。

※完全に個人による見解なので、間違えている可能性もあります。詳しくはMS公式を参照ください。

それでは、行データを取得して、 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");

    /* 
      今回の内容はここから
    */ 
    // foreachで行を取得する(DataRow)
    foreach (DataRow dr in dt.Rows)
    {
        Console.WriteLine(dr["HINMEI"]);
    }
    
    // ログ出力内容
    // りんご
    // ぶどう
    // みかん


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

今回は、まとめる必要がありませんでしたが、メソッド形式のソースコードも記載したいので載せます。

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


        private void DataTable_Get_Rows_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");

            /* 
              今回の内容はここから
            */ 
            // foreachで行を取得する(DataRow)
            foreach (DataRow dr in dt.Rows)
            {
                Console.WriteLine(dr["HINMEI"]);
            }

            // ログ出力内容
            // りんご
            // ぶどう
            // みかん
        }


まとめ

ssループ処理で、行データを取得するソースコードを記載しました。

ループ処理は、必ず必要になってきますので、早めに習得しましょう。

各セクションの役割と、foreach文の流れを把握すると、理解が深まると思います。

foreach 文では、今何件目のループかを判断したり、インデックスを指定する事が必要になった時に

結局 for 文で書き直すときもあります。

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


Microsoft 公式ページ

DataRowCollection クラス
https://docs.microsoft.com/ja-jp/dotnet/api/system.data.datarowcollection?view=netframework-4.0


foreach、in (C# リファレンス)
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/foreach-in