【C#】データテーブルから一致するデータを取得する【DataTable】
データテーブルから一致するデータを取得(条件なし)
「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までご連絡ください。
最近のコメント