DataSet:Enumerator和FindById不返回相等的DataRow

时间:2009-06-25 10:09:33

标签: c# .net dataset enumerator

今天我的代码中的问题有点奇怪,我还无法重现它。我正在使用一个类型化的数据集(使用设计器创建),并且我循环遍历数据表中的所有行。

有时(!),当通过主键查找时,返回的行不等于枚举器中的行。这是我写的一些代码来重现这个问题:

foreach(DataSet1.DataTable1Row dr in ds.DataTable1)
{
    if(ds.DataTable1.FindById(dr.Id) != dr)
        Console.Write(dr.Id);
}

没有行会被写入控制台,因为FindById总是返回同一行,这是非常合乎逻辑的。在我的项目代码中,类似的数据集包含一些String列,大约3%的行(总是相同的行!)它没有,而其中一个String字段只是空的:

ds.DataTable1.FindById(dr.Id) != dr // returns false, for whatever reason

主键是唯一的主键字段,因此FindById是生成的方法。有人知道一点提示或之前遇到过同样的问题吗?我担心这是一个非常特殊的案例,我做了这个错误或功能。 :)

我想过这可能是由枚举完成的演员制作的。枚举器确实使用生成的类型行的DataRow基类型。但我没有发现错误......

干杯 的Matthias

1 个答案:

答案 0 :(得分:2)

你主键的类型是什么? DataSet有一个微妙的bug来比较Guids(可能还有其他值)。 Guid错误只与某些Guid值有关,通常效果很好。

注意:当我说有一个错误时,我的意思是我知道错误报告已经被接受但我不知道它是否已被修复