
今回は、DataTableの重複削除について、まとめていきたいと思います。
DataTableを使用していると、重複行を削除したい時がよくありますので、備忘録として記載しておきます。
重複削除 DataView 使い方
DataTableの重複を削除するには、DataViewを使用すると簡単にできます。さっそく使い方を見てみましょう。
Dim dtView As DataView
dtView = New DataView(datatable)
dt = dtView.ToTable(True,項目名)
解説
DataView.ToTableを使うことで、重複削除ができます。
1つ目の引数:重複削除の指定ができます。Trueの時は、重複削除をする。Falseの時は、重複削除をしない。
2つ目の引数:DataTableの項目名を指定することで、指定した項目のみを抽出します。
それでは、実際の例を見てみましょう。
下の画像のようなデータが存在しているとしましょう。このデータの重複しているデータを削除していきます。
//データテーブル作成
DataTable dt = new DataTable();
dt.Columns.Add("name");
dt.Columns.Add("old");
dt.Columns.Add("height");
DataRow dtRow;
for (int i = 0; i < 10; i++)
{
dtRow = dt.NewRow();
dtRow["name"] = "ひろにも";
if (i < 5)
{
dtRow["old"] = "10";
}
else
{
dtRow["old"] = "20";
}
dtRow["height"] = "160";
dt.Rows.Add(dtRow);
}
//DataView 重複削除
DataView dtview = dtview = new DataView(dt);
dt = dtview.ToTable(true);
//結果出力
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();
}
結果
ひろにも 10 160
ひろにも 20 160
解説
27行目~29行目:この行に注目してみてみましょう。DataViewを作成して、ToTableでデータテーブルに変換するときに重複を削除しています。
結果をみると、ちゃんと重複が削除されているのが、わかりますね。
重複削除 項目指定
先ほどの例では、第1引数のみしか使用していませんので、次は第2引数を使用してみましょう。
DataView dtview = dtview = new DataView(dt);
dt = dtview.ToTable(true, "name");
結果
ひろにも
先ほどのデータを項目指定で重複してみました。
nameなので、「ひろにも」のみ表示されています。
重複削除 複数項目
最後に複数項目を指定して、重複を削除したい時のやり方ですが、項目を配列に格納して、引数に当てはめるだけです。
配列の使い方がわからない人は、こちらを参考にしてみてください。
DataView dtview = dtview = new DataView(dt);
dt = dtview.ToTable(true, new string[2] { "name", "old" });
結果
ひろにも 10
ひろにも 20
今回は「name」「old」の2項目を指定して実行しました。
2件のデータが取得できていますね。
まとめ
今回は、DataTableにおける重複削除のやり方を紹介しました。
普段DataTableを利用している人は、是非参考にしてみてください。