我正在使用 SqlDataReader 逐行添加到数据表中,如下所示:
while (reader.Read())
{
dataTable.LoadDataRow(reader.CurrentRow(), LoadOption.PreserveChanges);
}
这可行,但是我需要能够避免向数据表添加重复的行。我希望能够使用 dataTable 中的 Contains 或 Find 方法,但我无法找到一种方法将 object[] 从 reader.CurrentRow() 转换为 DataRow 进行比较,而不将其添加到数据表中。
我研究了创建对象[]的哈希集,然后将它们一次全部添加到最后的数据表中的选项,但我忘记了默认对象 IEqualityComparer 仅比较引用。
是否有一种可行的方法可以在不删除最后重复项的情况下执行此操作?
如果删除重复项是唯一的方法,那么最好的方法是什么?
编辑: 我在代码中将数据库中的不同行拆分为单独的数据表。查询结果中的每一行是不同的,但每行的部分却不同。不幸的是,我需要完全按照我的问题要求去做,因为查询的结果已经很明显了。
最佳答案
您没有提供大量细节,但我希望这是全面的。
如果您需要单个列是唯一的,则在数据表的“列”集合中,指定如下列:
DataTable appeals = new DataTable("Appeals");
appeals.Columns["PriorAppealNumber"].Unique = true;
DataColumn keyField = new DataColumn("AppealNumber", typeof(string));
appeals.Columns.Add(keyField);
如果唯一性需要跨越多行,则方法如下:
var myUniqueConstraint = new UniqueConstraint( new DataColumn[] {appeals.Columns[0], appeals.Columns[1], appeals.Columns[2]} );
appeals.Constraints.Add(myUniqueConstraint);
这将在您尝试提交回源数据库之前强制执行约束。
关于c# - 如何避免向数据表添加重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11890960/