こんにちは、ひろにもです。
今回は、DataTableの重複削除について、まとめていきたいと思います。
DataTableを使用していると、重複行を削除したい時がよくありますので、備忘録として記載しておきます。
DataTable 重複削除 DataViewを使用する
DataView.ToTableの使い方
DataTableの重複を削除するには、DataViewを使用すると簡単にできます。さっそく使い方を見てみましょう。
Dim dtView As DataView
dtView = New DataView(datatable)
dt = dtView.ToTable(True,項目名)
DataView.ToTableを使うことで、重複削除ができます。
1つ目の引数で、重複削除の指定ができます。Trueの時は、重複削除をする。Falseの時は、重複削除をしない。
2つ目の引数は、DataTableの項目名を指定することで、指定した項目のみを抽出します。
サンプル
まずは、データテーブルを作成しましょう。
Dim dt As New DataTable("people")
dt.Columns.Add("name")
dt.Columns.Add("old")
dt.Columns.Add("height")
'DataRow宣言
Dim dtRow As DataRow
For i As Integer = 0 To 9
'1行目
dtRow = dt.NewRow
dtRow("name") = "ひろ"
If i < 5 Then
dtRow("old") = "10"
Else
dtRow("old") = "20"
End If
If i = 9 Then
dtRow("height") = (100 + (i - 1) * 10).ToString
Else
dtRow("height") = (100 + i * 10).ToString
End If
'行追加
dt.Rows.Add(dtRow)
Next
こんな感じのデータテーブルがあるとします。最後の2つのデータが重複していますね。それでは、削除してみましょう、
Dim dtView As DataView
dtView = New DataView(dt)
dt = dtView.ToTable(True)
結果
重複が削除されました。
重複削除 項目指定
次は、項目を指定して重複項目を削除してみましょう。
Dim dtView As DataView
dtView = New DataView(dt)
dt = dtView.ToTable(True, "name")
結果
name指定しているので、1行のみ取得できました。
重複削除 複数項目
最後に複数項目を指定して、重複を削除したい時のやり方ですが、項目を配列に格納して、引数に当てはめるだけです。
とても簡単です。
Dim dtView As DataView
dtView = New DataView(dt)
dt = dtView.ToTable(True, {"name", "old"})
結果
まとめ
Dim dtView As DataView
dtView = New DataView(datatable)
dt = dtView.ToTable(True,項目名)
もしくは
datatable = datatable.DefaultView.ToTable(True, 項目名)
この書き方を覚えておくととても便利です。
関連記事