代码之家  ›  专栏  ›  技术社区  ›  Matthias Meid

数据集:枚举器和findbyid不返回相等的数据行

  •  0
  • Matthias Meid  · 技术社区  · 15 年前

    今天我的代码中的问题有点奇怪,我还不能复制它。我正在处理一个类型化的数据集(由设计器创建),并且我正在循环处理数据表中的所有行。

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

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

    不会向控制台写入任何行,因为findbyid总是返回同一行,这是非常合乎逻辑的。在我的项目代码中,有一个类似的数据集,有几个字符串列,在大约3%的行中(总是相同的行!)没有,其中一个字符串字段为空:

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

    主键是唯一的主键字段,因此findbyid是一个生成的方法。有人知道一点提示吗?或者以前也遇到过同样的问题吗?恐怕这是我做的一个非常特殊的案例,它启用了这个bug或特性。:)

    我考虑过这个可能是由枚举所做的演员表产生的。枚举器使用 DataRow 生成的类型化行的基类型。但我没有发现什么问题…

    干杯 马蒂亚斯

    1 回复  |  直到 15 年前
        1
  •  2
  •   Rune FS    15 年前

    你的主键是什么类型的?数据集有一个比较guid(可能还有其他值)的细微缺陷。guid错误只与某些guid值有关,通常工作正常。

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