중복이 여러 값일 수있는 단일 텍스트 열 '제목'이있는 데이터 테이블을 사용했습니다. 나는 데이터보기를 사용하여 중복을 제거 할 수 있습니다.데이터 테이블에서 각 고유 값에 대한 중복 수 얻기
DataView v = new DataView(tempTable);
tempTable = v.ToTable(true, "Title");
그러나 반복없이 각 고유 값에 대해 중복 수를 얻으려면 어떻게해야합니까?
중복이 여러 값일 수있는 단일 텍스트 열 '제목'이있는 데이터 테이블을 사용했습니다. 나는 데이터보기를 사용하여 중복을 제거 할 수 있습니다.데이터 테이블에서 각 고유 값에 대한 중복 수 얻기
DataView v = new DataView(tempTable);
tempTable = v.ToTable(true, "Title");
그러나 반복없이 각 고유 값에 대해 중복 수를 얻으려면 어떻게해야합니까?
루프를 사용하거나 Linq를 사용하고 싶지 않으므로이를 수행 할 방법이 없지만 데이터 테이블에서 계산할 수있는 조건이 하나 더 있으면 계산할 수 있습니다. 데이터는 이와 같이 두 개의 관련 테이블에 있어야합니다.
DataRelation rel = new DataRelation("CustToOrders", data.Tables["Customers"].Columns["customerid"], data.Tables["Orders"].Columns["customerid"]);
data.Relations.Add(rel);
Orders 테이블에 해당 고객 ID 필드를 외래 키로 지정하면 중복 된 값이됩니다. 다음과 같이 중복 횟수를 확인할 수 있습니다.
data.Tables["Customers"].Columns.Add("Duplicates",
GetType(Decimal), "Count(child.customerid)");
방법 나는 당신이 다음과 같이 보일 것입니다 원하는 결과를 얻을 것이다 :
tempTable.Rows.Cast<DataRow>()
.Select(dr => Convert.ToString(dr[0]))
.GroupBy(dr => dr)
.Select(g => new { Title = g.Key, Count = g.Count() });
그러나, 실제로 후드 루프입니다. 사실, 나는 각 레코드를 조사하지 않고 그런 종류의 그룹화를하는 방법을 생각할 수 없다.
단점은 그 표현식의 결과가 일련의 익명 형식 인스턴스라는 것입니다. 여전히 결과를 DataView로 만들려면 마지막 Select를 다시 작성하여 두 개의 열이있는 새 DataRow를 만들고 DataView로 전달하는 새 DataTable로 밀어 넣습니다.
Linq를 사용하는 것이 축복이 아닙니다. – NLV
'tempTable.AsEnumerable()'으로'tempTable.Rows.Cast()'을 대체 할 수 있습니다. –