我正在使用SqlDataReader逐行添加到数据表中,如下所示:
while (reader.Read())
{
dataTable.LoadDataRow(reader.CurrentRow(), LoadOption.PreserveChanges);
}
这样可行,但我需要能够避免向dataTable添加重复的行。我希望能够使用dataTable中的Contains或Find方法,但是我无法找到将reader []从reader.CurrentRow()转换为DataRow的方法,以便在不将其添加到数据表的情况下进行比较。
我已经研究了制作对象[] s的哈希集的选项,然后将它们一次性地添加到最后的数据表中,但是我忘了默认对象IEqualityComparer只比较引用。
有没有一种可行的方法可以在不删除重复项的情况下执行此操作?
如果删除重复项是唯一的方法,那么最好的方法是什么?
编辑: 我正在将数据库中的不同行拆分为代码中的单独数据表。查询结果中的每一行都是不同,但每行的各部分不是。不幸的是,我需要完全按照我的问题提出要求,因为查询的结果已经不同了。
答案 0 :(得分: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 :(得分:1)
最简单的方法是实际确保根本没有重复的行 - 如果您要查询关系数据库的使用DISTINCT
- 那将只返回唯一的行。