【C#】foreachを使ってデータテーブルから行を取得する【DataTable】
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
お問い合わせ先
Twitterの利用再開しましたのでお問い合わせのある方はTwitterまでご連絡ください。
最近のコメント