2012-01-04 8 views
0

私は2つのデータテーブル、例えばdt1dt2を持っています。 dt1にはすべての国のリストが含まれており、dt2には少数の国のリストが含まれています。 dt3のデータテーブルdt2のリストを除くすべての国を含むデータテーブルが必要です。データテーブルの検索方法

+2

これまでに何を試しましたか?それはあなたを助けるでしょう。私たちはあなたのためにあなたの仕事をしません。 – Amy

+1

宿題のような音.... – DonCallisto

+0

ヒント:** except ** –

答えて

3

Exceptを使用するには、あなたは彼らがdt2に同じDataRowのではありませんので、既定の比較がdt1内のすべての行を返しますので、IEqualityComparer<DataRow>を受け取るオーバーロードを使用する必要があります。あなたの場合は

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

:あなたは次のようにdt2にないdt1で国を得ることができます

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(); 
    } 
} 

:この単純な実装を(エラー処理を追加する必要があります)を使用して、例えば

、このために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();