C# DataTable を Distinct して重複を除外する

DataTable の中身の重複を除外する方法です。

重複した DataTable

このような重複データを、ラムダ式で Distinct します。

 
var ret = dt.AsEnumerable().Select(row => new
{
    ShishaName = row.Field<string>("ShishaName"),
    BushoName = row.Field<string>("BushoName"),
}).Distinct();

重複が除外されました。
列が大量にある場合は、列名をいちいち定義しているので少々つらいかもしれません。

foreach (var item in ret)
{
    var shisha = item.ShishaName;
}

ただ、列名に名前を付けているので、その後の扱いは便利です。
名前で参照することができます。

以上の方法で DataTable から重複データを削除することができます。
しかし、もしこの DataTable が DB から取得しているデータだとしたら、データの取得方法がおかしいか、データベース設計がおかしいか、疑いを持つべきです。

データを取得する時点で、重複しないようにするのがあるべき姿です。
なぜなら、無駄なデータを取得するだけでコストがかかるからです。
すぐにプログラム側でなんとかするというアプローチに走るのは、よい実装とは言えません。

このブログの人気の投稿

Excel で入力した文字に勝手に取り消し線が入る

コピーした行の挿入が表示されない時はフィルタされていないかチェック