2012-02-13 6 views
0

50,000 개가 넘는 행으로 구성된 .NET 데이터 테이블에서 중복을 제거하려고합니다. 필자의 접근 방식은 간단합니다. 데이터 테이블을 사전 순으로 정렬 한 다음 위의 행과 동일한 행을 찾아 스캔합니다.큰 정렬 된 데이터 테이블 "랩"

내가 겪고있는 문제는 데이터 테이블이 정렬 될 때 주위를 "감싸는"것입니다. 나는 그것을 정렬이 사용

myDataTable.DefaultView.Sort = "name"; 

내가 디버거를 사용하여 데이터 테이블을 볼 때, 그것과 같이, 덩어리에서 알파벳 순으로 정렬되어

Aardvark 
Apple 
Banana 
...(20,000 rows later)... 
Aardvark 
Angle 
Boat 

은 분명히이 중복을 찾기 위해 내 시도 유적. 대형 테이블을 다룰 때 프레임 워크의 일종의 최적화 동작입니까? 여기서 무슨 일이 일어나고있는거야?

솔루션 :

여기

여기

myDataTable.DefaultView.Sort = "name"; 
for (int i =0; i< myDataTable.DefaultView.Table.Rows.Count; i++) 
{ 
    var thisRow = myDataTable.DefaultView.Table.Rows[i]; 
    var prevRow = myDataTable.DefaultView.Table.Rows[i-1]; 
} 

내가 일을 했어야 것입니다 .. 내가 무엇을하고 있었는지입니다 : 당신은 정렬하고 여기에

myDataTable.DefaultView.Sort="name"; 
var myNewDatatable = myDataTable.DefaultView.ToTable(); 
for (int i =0; i< myNewDatatable.Rows.Count; i++) 
{ 
    var thisRow = myNewDatatable.Rows[i]; 
    var prevRow = myNewDatatable.Rows[i-1]; 
} 
+0

데이터 원본이란 무엇입니까? 데이터베이스 인 경우 SQL 문을 사용하여이 작업을 수행 할 수 있습니까? – Yuck

+0

CSV에서로드 된 DataGridView입니다. 나는 테이블을 복제함으로써 중복을 제거 할 수 있다는 것을 발견했다. (그 메소드에 '고유 한'매개 변수가있다.) 그러나 그것은 정말로 느리다. – PseudoTek

답변

0
myDataTable.DefaultView.Sort = "name"; 

DataTable의 경우 DataView이고 DataTable의 경우는 아닙니다. 그래서 당신은 DataView (myDataTable.DefaultView) 를 사용하거나이를 위해 this 오버로드를 사용하여 이름

DataRow[] sorted = myDataTable.Select("", "name"); 
0

으로 정렬 DataTableDataRow 년대를 얻기 위해 하나있다.

DataTable uniqueTable = myDataTable.DefaultView.ToTable("UniqueStuff", true, "SomeCol", "AnotherCol", "YetAnotherCol");