3 つの列を持つ SQL Server テーブルがあります。
表1
col1 int
col2 int
col3 string
3 つの列すべてに一意の制約が定義されています(col1, col2, col3)
ここで、このテーブルにレコードを追加したい .csv ファイルがあり、*.csv ファイルには重複したレコードが含まれている可能性があります。
上記のシナリオで重複を回避するためのさまざまなオプションを検索しました。以下は、私にとってうまく機能している3つのオプションです。最適な方法を選択できるように、各方法の長所と短所についていくつかのアイデアを検討してください。
オプション1 :
最初に重複を回避します。つまり、csv ファイルからリストにオブジェクトを追加します。私はHashSet<T>
これに使用し、以下のタイプ T のメソッドをオーバーライドしました。
public override int GetHashCode()
{
return col1.GetHashCode() + col2.GetHashCode() + col3.GetHashCode();
}
public override bool Equals(object obj)
{
var other = obj as T;
if (other == null)
{
return false;
}
return col1 == other.col1
&& col2 == other.col2
&& col3 == other.col3;
}
オプション #2
List<T>
の代わりに持つHashSet<T>
。
すべてのオブジェクトが追加された後に重複を削除するList<T>
List<T> distinctObjects = allObjects
.GroupBy(x => new {x.col1, x.col2, x.col3})
.Select(x => x.First()).ToList();
オプション #3
すべてのオブジェクトが に追加された後、重複を削除しDataTable
ます。
public static DataTable RemoveDuplicatesRows(DataTable dataTable)
{
IEnumerable<DataRow> uniqueRows = dataTable.AsEnumerable().Distinct(DataRowComparer.Default);
DataTable dataTable2 = uniqueRows.CopyToDataTable();
return dataTable2;
}
実行時間を比較したことはありませんが、最初のステップとして重複を削除するため、オプション 1 を好みます。したがって、必要なものだけを先に進めます。
私が最良のものを選ぶことができるように、あなたの意見を共有してください.
どうもありがとう!