次の構造を持つIEqualityComparer<DataRow>
から重複行を削除するには、どのように実装する必要がありますか:DataTable
ID primary key, col_1, col_2, col_3, col_4
各行には独自の一意の主キーがあるため、デフォルトの比較演算子は機能しません。
IEqualityComparer<DataRow>
主キーをスキップして残ったデータのみを比較する実装方法。
私はこのようなものを持っています:
public class DataRowComparer : IEqualityComparer<DataRow>
{
public bool Equals(DataRow x, DataRow y)
{
return
x.ItemArray.Except(new object[] { x[x.Table.PrimaryKey[0].ColumnName] }) ==
y.ItemArray.Except(new object[] { y[y.Table.PrimaryKey[0].ColumnName] });
}
public int GetHashCode(DataRow obj)
{
return obj.ToString().GetHashCode();
}
}
と
public static DataTable RemoveDuplicates(this DataTable table)
{
return
(table.Rows.Count > 0) ?
table.AsEnumerable().Distinct(new DataRowComparer()).CopyToDataTable() :
table;
}
しかし、それは呼び出すだけで呼び出しGetHashCode()
ませんEquals()