首页 文章

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

提问于
浏览
2

我正在使用SqlDataReader逐行添加到数据表中,如下所示:

while (reader.Read())
{
    dataTable.LoadDataRow(reader.CurrentRow(), LoadOption.PreserveChanges);
}

这有效,但 I need to be able to avoid adding duplicate rows to the dataTable . 我希望能够使用dataTable中的Contains或Find方法,但是我无法找到将reader []从reader.CurrentRow()转换为DataRow的方法,以便在不将其添加到数据表的情况下进行比较 .

我已经研究了制作对象[]的哈希集的选项,然后将它们一次性地添加到最后的数据表中,但是我忘了默认对象IEqualityComparer只比较引用 .

有没有一种可行的方法可以在不删除重复项的情况下执行此操作?

如果删除重复项是唯一的方法,那么最好的方法是什么?

编辑:我正在将数据库中的不同行拆分为代码中的单独数据表 . 查询结果中的每一行都是不同的,但每行的各部分不是 . 不幸的是,我需要完全按照我的问题提出要求,因为查询的结果已经不同了 .

2 回答

  • 3

    你没有提供大量细节,但我希望这是全面的 .

    如果您需要单个列是唯一的,那么在数据表的Columns集合中,指定如下列:

    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);
    

    这将在您尝试提交回源数据库之前强制执行约束 .

  • 1

    最简单的方法是实际确保根本没有重复的行 - 如果您查询关系数据库使用 DISTINCT - 它将只返回唯一的行 .

相关问题