2012-01-04 4 views
0

데이터 테이블이 두 개 있는데, 예를 들어 dt1dt2입니다. dt1에는 모든 국가의 목록이 포함되어 있고 dt2에는 몇 개의 국가 목록이 포함되어 있습니다. dt3의 데이터 테이블 dt2에있는 국가 목록을 제외한 모든 국가를 포함해야합니다.데이터 테이블을 찾는 방법

+2

지금까지 해보신 것은 무엇입니까? 그래서 너를 도울거야. 우리는 당신을 위해 당신의 일을하지 않을 것입니다. – Amy

+1

숙제 같은 소리 .... – DonCallisto

+0

힌트 : ** except ** –

답변

3

Except를 사용하려면, 당신은 그들이 같은 DataRowdt2에 아니기 때문에 dt1의 모든 행을 반환합니다 기본 비교 년부터 IEqualityComparer<DataRow> 걸리는 과부하를 사용해야합니다. 이 단순한 구현을 사용하여 예를 들어

, (당신은 오류 처리를 추가해야합니다) :

public class CountryRowComparer : IEqualityComparer<DataRow> 
{ 
    public bool Equals(DataRow r1, DataRow r2) 
    { 
     return r1["Country"] == r2["Country"]; 
    } 

    public int GetHashCode(DataRow r) 
    {  
     return r["Country"].GetHashCode(); 
    } 
} 

는 다음과 같이 dt2에없는 그 dt1의 나라를 얻을 수 있습니다 :

var dt3 = dt1.AsEnumerable().Except(dt2.AsEnumerable(), new CountryRowComparer()).CopyToDataTable(); 

당신이 만약 IEqualityComparer 클래스를 만들려고 귀찮게하고 싶지 않다면 dt1에있는 국가를 얻는 또 다른 방법은 dt2이됩니다.

var exclude = dt2.AsEnumerable() 
       .Select(r => r.Field<string>("Country")); 

var dt3 = dt1.AsEnumerable() 
      .Where(r => !exclude.Contains(r.Field<string>("Country"))) 
      .CopyToDataTable(); 
관련 문제