2016-09-19 13 views
-1

私はC#でdt1とdt2と言う2つのデータテーブルを持っています。 Reference Idに基づいてdt2に存在しないdt1からレコードを取得する必要があり、LINQ経由で複数の列を選択する必要があります。C#でデータテーブルにLinqを適用する

+1

を使用してそれを行う方法を、私は現在、参照のみをチェックし、(実際の列名に置き換え)Primary Keyを比較していますように、要件ごとにDataRowComparerを変更することができます必要があります既に試したコードを表示しますか? –

+0

@MrinalKamboj編集を承認してはいけません。ランダムな用語を強調表示するために ''インラインコード ''を使わないでください。 – CodeCaster

+0

@CodeCaster確かにありがたいですが、編集時に改善しました。 –

答えて

1

あなたはこれを試すことができます。

var result = dt1.AsEnumerable() 
      .Where(p => !dt2.AsEnumerable().Any(p2 => p2["id"] == p["id"])) 
      .CopyToDataTable(); 

あなたは選択肢がたくさんあります。 LINQ EXCEPTもお試しください。

+0

'Linq API'は' IEnumerable 'の拡張メソッドですが、' DataTable'に直接適用することはできません。 'DataTable'に' Linq API'を呼び出すために 'AsEnumerable'を使用してください。 –

+0

@MrinalKamboj - ありがとう、 。私は自分の答えを更新しました。 –

+0

DataTableの 'AsEnumerable'は' IEnumerable 'を生成し、' T'型は期待どおりに生成していないので間違っています。値を取得するには、 'DataRow []'が必要です。 –

1

あなたが複数の列に C# Errors when doing a simple datarow comparer

var result = dt1.AsEnumerable().Except(dt2.AsEnumerable(), new DataRowComparer()).CopyToDataTable(); 

public class DataRowComparer : IEqualityComparer<DataRow> 
{ 
    /// <summary> 
    /// Whether the two strings are equal 
    /// </summary> 
    public bool Equals(DataRow x, DataRow y) 
    { 
     return x["PrimaryKey"] == y["PrimaryKey"]; 
    } 

    /// <summary> 
    /// Return the hash code for this string. 
    /// </summary> 
    public int GetHashCode(DataRow dataRow) 
    { 
     return dataRow["PrimaryKey"].GetHashCode(); 

    } 
} 
関連する問題