

# 前提

（例）A テーブルがあって、会社コードと部署コードで Distinct をかけたい  
Column1, Column2

## Aテーブル

[code]

    (1)001,A
    (2)002,A
    (3)001,C
    (4)003,B
    (5)004,D
    (6)001,A
    (7)002,A
    
[/code]

[code]

    //DataTableの作成 ※ATableからデータを取得する処理のイメージ
    DataTable dt = Aテーブル;
    
    //DataViewの作成
    DataView dv = dt.DefaultView;
    
    //Distinctをかける
    DataTable resultDt = dv.ToTable(true, "Column1", "Column2");
    
[/code]

# 結果

[code]

    (1)001,A
    (2)002,A
    (3)001,C
    (4)003,B
    (5)004,D
    
[/code]

* * *

# 発生している問題

上記の結果はコード上でも確認して理解できたのですが、以下のようにコードを変更したら

[code]

    //Distinctをかける
    DataTable resultDt = dv.ToTable(true, , "Column2");
    
[/code]

出力が以下のようになり Column1 が完全に消えてしまいました。

## Aテーブル

[code]

    (1)A
    (3)C
    (4)B
    (5)D
    
[/code]

A テーブルで Column2 で重複判定して以下の様に出力させるにはどのように実装すればよいのでしょうか？

## 欲しい出力結果

[code]

    (1)001,A
    (3)001,C
    (4)003,B
    (5)004,D
    
[/code]

* * *

# 補足情報 (OS, ツールのバージョンなど)

参考:

  * [DataTableに対してDistinctをかける方法 - Road to NAgiler](https://kumat.hatenadiary.org/entry/20080528/p1)


CC BY-SA 4.0
2019-03-13T08:14:46.873
53400
2021-12-23T14:05:05.593
2019-05-06T12:04:36.923
29826
14118
question
c#
DataTableの特定の列に対して重複判定したい


`Group by` の話のように見えます。  
本家にて同じようなことをしてる投稿を見つけました。[stackoverflow.com/a/19407930/10882610](https://stackoverflow.com/a/19407930/10882610)

Linqで`Group by`するコーディング例：

[code]

    dt = dt.AsEnumerable()
           .GroupBy(r => new {Col1 = r["Col1"], Col2 = r["Col2"]})
           .Select(g => g.OrderBy(r => r["PK"]).First())
           .CopyToDataTable();
    
[/code]

* * *

この投稿は @wata
さんの[コメント](https://ja.stackoverflow.com/questions/53400/#comment55975_53400)などを元に編集し、[コミュニティWiki](https://ja.meta.stackoverflow.com/q/1583)として投稿しました。


CC BY-SA 4.0
2021-02-12T12:56:22.570
73957
2021-02-12T12:56:22.570
9820
53400
answer