DataTable不合并用户定义的对象

时间:2010-04-26 08:16:07

标签: c# merge datatable

我遇到了一个DataTable处理我自己定义的对象(位置)的问题。 该对象存储一些数据并覆盖ToString,Equals和GetHashCode。此外,它为==和!=。

提供静态运算符

只要存储此对象的列不是键列,DataTable就可以正常工作。将其设置为PrimaryKey并将另一个表合并到它会失败,因为找不到相同的内容。 (补充datagridview和DataTable本身会在合并后查找违反密钥的数据。)

附上你会在合并后找到一些数据的手动比较。

有人知道如何处理这个问题吗?

最好的问候,Tilo

this.data.Rows[1][5]==this.data.Rows[0][5]
false

(Position)this.data.Rows[1][5]==(Position)this.data.Rows[0][5]
true

this.data.Rows[1][5].Equals(this.data.Rows[0][5])
true

this.data.Rows[1][5].GetHashCode()
-461267399
this.data.Rows[0][5].GetHashCode()
-461267399

this.data.Columns[5]
{PositionX}
base {System.ComponentModel.MarshalByValueComponent}: {PositionX}
AllowDBNull: false
AutoIncrement: false
AutoIncrementSeed: 0
AutoIncrementStep: 1
Caption: "PositionX"
ColumnMapping: Element
ColumnName: "PositionX"
DataType: {Name = "Position" FullName = "TiloW.Parameter.Position"}
DateTimeMode: UnspecifiedLocal
DefaultValue: {}
Expression: ""
ExtendedProperties: Count = 1
MaxLength: -1
Namespace: ""
Ordinal: 5
Prefix: ""
ReadOnly: false
Table: {}
Unique: false 

1 个答案:

答案 0 :(得分:0)

仅供参考。我找到了一个解决方案,添加了一个存储覆盖哈希码的新列,该列将用于合并和内部事务。它将在导出之前删除,并在导入或生成期间创建。