45000を超える行を持つ2つのデータテーブルの間に共通の行(重複行を含む)をすべて取得したいとします。2つのデータテーブルの交差点がカスタムデータコンシューマでゼロ行を返します
しかし、私は比較範囲から "列2"と "列6の後のすべての列"をスキップしたいと思います。しかし、私は交差結果として行を取得していません。私はどこに間違っているのかを誰にでも示唆することができますか?ここで
は私のコードが書かれたのです。ここで
CustomDataRowComparer myDRComparer = new CustomDataRowComparer();
var commonData = outputTable.AsEnumerable().Intersect(prevTable.AsEnumerable(), myDRComparer).CopyToDataTable();
public class CustomDataRowComparer : IEqualityComparer<DataRow>
{
public bool Equals(DataRow x, DataRow y)
{
for (int i = 0; i < 7; i++)
{
if (i !=1) // Don't want to consider this column for comparison
{
if (x[i].ToString() != y[i].ToString())
{
return false;
}
}
}
return true;
}
public int GetHashCode(DataRow obj)
{
return obj.ToString().GetHashCode();
}
です。これを試してみてください:戻り値string.Join( "^"、obj.ItemArray.Select((x、i)=> i == 1? "":x.ToString())。ToArray())GetHashCode(); – jdweng
ハッシュを使用すると、Equals()メソッドはDataRow xとDataRow yを単に比較できます。ハッシュは一意になり、一致する行が決まります。 – jdweng