본문 바로가기
개발/C#

[C#] DataTable 중복 row 제거하기 (Distinct)

by 김토끼A 2021. 8. 14.

 

 아래 그림을 보시면 pink, yellow가 중복되 있고 그것을 제거하는 모습을 확인할 수 있습니다. 이와 같이 C#에서 DataTable에 중복된 row를 제거하는 방법에 대해 알아보겠습니다.

 

DataTable 중복제거
예시

 

C#에서 아래와 DefaultView.ToTable 메서드를 활용하여 중복을 제거한 새로운 DataTable을 만들 수 있습니다.

 

DataTable colorDt = new DataTable(); //중복된 DataTable
DataTable distinctDt = colorDt.DefaultView.ToTable(true); //중복제거한 DataTable

 

DefaultView.ToTable 메서드 사용한 예시를 아래에 확인할 수 있습니다.

 

CASE 1.

DataTable 중복제거
CASE 1. 예시

// 데이터 생성
DataTable colorDt = new DataTable(); 

colorDt.Columns.Add("COLOR"); 

colorDt.Rows.Add(new object[] { "pink" });
colorDt.Rows.Add(new object[] { "yellow" });
colorDt.Rows.Add(new object[] { "black" });
colorDt.Rows.Add(new object[] { "yellow" });
colorDt.Rows.Add(new object[] { "red" });
colorDt.Rows.Add(new object[] { "pink" });

// 중복제거
DataTable distinctDt = colorDt.DefaultView.ToTable(true);

 

 일단 먼저 colorDt라는 DataTable을 생성후 COLOR라는 칼럼을 추가 했습니다. 그리고 색깔 데이터를 Add()했는데, 그 중 yellow와 pink가 각 2개씩으로 중복이 발생한 것을 확인할 수 있습니다.

 이 데이터를 DefaultView.ToTable 메서드를 사용하여 중복을 제거하여 distincDt라는 DataTable을 생성합니다. distincDt의 데이터는 위의 우측 그림을 확인하시면 됩니다.

 

 

CASE 2.

DataTable 중복제거
CASE 2. 예시

// 데이터 생성
DataTable AnimalDt = new DataTable(); 

AnimalDt.Columns.Add("ID"); 
AnimalDt.Columns.Add("NAME"); 

AnimalDt.Rows.Add(new object[] { "1", "dog" });
AnimalDt.Rows.Add(new object[] { "2", "rabbit" });
AnimalDt.Rows.Add(new object[] { "3", "tiger" });
AnimalDt.Rows.Add(new object[] { "1", "cat" });
AnimalDt.Rows.Add(new object[] { "2", "rabbit" });
AnimalDt.Rows.Add(new object[] { "1", "dog" });
AnimalDt.Rows.Add(new object[] { "3", "cat" });

// 중복제거
DataTable distinctDt = AnimalDt.DefaultView.ToTable(true, new string[] {"ID", "NAME"});

 

 앞서 설명한 예시는 DataTable의 칼럼이 1개였지만 CASE 2.는 칼럼을 두개를 이용하여 중복을 제거해보겠습니다. AnimalDt라는 DataTable에는 여러 동물이름과 ID가 있습니다. cat이라는 동물은 중복이지만 같은 ID를 가진 cat은 존재하지 않기때문에 제거 되지 않습니다.

 결론적으로 ID, NAME이 모두 중복되지 않는 distinctDt라는  DataTable을 생성할 수 있습니다. distincDt의 데이터는 위의 우측 그림을 확인하시면 됩니다.

'개발 > C#' 카테고리의 다른 글

[C#] DataTable 구조 및 데이터 복사 (Clone, Copy)  (0) 2021.08.30

댓글