我有一个包含三列的 SQL Server 表:
表格1
col1 int
col2 int
col3 string
我为所有三列定义了一个唯一约束(col1, col2, col3)
现在,我有一个 .csv 文件,我想在此表中添加记录,并且 *.csv 文件可以有重复的记录。
我已经搜索了在上述情况下避免重复的各种选项。以下是对我来说效果很好的三个选项。请看一下并就每种方法的优缺点提出一些想法,以便我选择最好的方法。
选项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,因为我将删除重复项作为第一步 - 所以只进行所需的操作。
请分享您的意见,以便我选择最好的。
非常感谢!