C# DataTable  指定した列のみ取得

今回は、DataTableの指定した列を抽出する方法を紹介します。

DataTableから、指定した項目だけを取り出して使用したい時がありましたので、備忘録として残しておきます。

ちなみに行の取得は、Selectを使います。

DataTable 指定した列を取得

さっそく使い方を見てみましょう。

DataView dtview = dtview = new DataView(dt);
dt = dtview.ToTable(false, 列名);

DataViewを使用することで指定した列のみを抽出することができます。

ToTableの第2引数の【列名】のところに、DataTableの列名を入力しましょう。

複数の列がある場合は、配列にすることで指定した全ての列を取得することができます。

 

第1引数は、重複削除のフラグなので、今回は【False】にして使用しましょう。
重複削除のやり方は別の記事で記載しているので是非参考にしてみてください。

 

DataTable 列の抽出 1項目

それでは、実際に例を見てみましょう。
下記の画像のようなDataTableがあるとして、height項目のみを取得してみましょう。

//データテーブル作成
DataTable dt = new DataTable();
dt.Columns.Add("name");
dt.Columns.Add("old");
dt.Columns.Add("height");

DataRow dtRow;

for (int i = 0; i < 5; i++)
{
    dtRow = dt.NewRow();
    dtRow["name"] = "ひろにも";
    if (i < 2)
    {
        dtRow["old"] = "10";
    }
    else
    {
        dtRow["old"] = "20";
    }

    dtRow["height"] = 100 + i * 10;

    dt.Rows.Add(dtRow);
}

DataView dtview = dtview = new DataView(dt);
dt = dtview.ToTable(false, "height");

//結果出力
for (int rowindex = 0; rowindex < dt.Rows.Count; rowindex++)
{
    for (int colindex = 0; colindex < dt.Rows[rowindex].ItemArray.Length; colindex++)
    {
        Console.Write(dt.Rows[rowindex][colindex] + " ");
    }
    Console.WriteLine();
}

解説
1~25行目:DataTableを作成している。
27~28行目:height項目のみ取得している。

結果
100 
110 
120 
130 
140 

28行目のDataView.toTableの第2引数に【height】と指定するだけで、抽出できましたね。

DataTable 列の抽出 複数項目

複数項目の場合は、配列で項目を指定してあげましょう。

DataView dtview = dtview = new DataView(dt);
dt = dtview.ToTable(false, new string[2] { "old", "height" });
結果
10 100 
10 110 
20 120 
20 130 
20 140 

結果を見ると、指定した2項目{"old","height"}が取得できていることが確認できましたね。

まとめ

今回は、DataTableの項目を取得する方法を紹介しました。
この書き方だけ覚えておきましょう。

DataView dtview = dtview = new DataView(dt);
dt = dtview.ToTable(false, 列名);

 

C#の記事一覧

おすすめの記事