C# datatable 重複削除 dataview

今回は、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を利用している人は、是非参考にしてみてください。

 

C#の記事一覧

おすすめの記事