c# - 如何避免向数据表添加重复行

标签 c# datatable sqldatareader

我正在使用 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/

相关文章:

r - 避免仅在 R 数据表的第一列中包装文本

C# SQL 语句转换为 LINQ 我如何将此语句转换为工作 linq

c# - 读取位时来自 SqlDataReader 的无效转换异常

c# - 字符串到 byte[] - c# 的行为类似于 java

c# - 如何用WPF形式绘制一个可以调整大小的形状?

c# - 从数据表插入数据表

sql - 枚举器的 SQL Select 优化

c# - SqlDataReader 的 Connection 属性为 Null

c# - 如何使用 PowerShell 使用 C# DLL 中存在的类的新对象

c# - 将 ObservableCollection<XmlNode> 绑定(bind)到组合框 wpf