DataSet:EnumeratorとFindByIdは等しいDataRowを返しません
-
20-08-2019 - |
質問
私のコードの今日の問題はちょっと奇妙で、まだ再現できませんでした。型指定されたデータセット(デザイナーで作成された)で作業しており、データテーブルのすべての行をループしています。
時々(!)、主キーで検索するときに、返される行が列挙子の行と等しくないことがあります。これは私が問題を再現するために書いたコードです:
foreach(DataSet1.DataTable1Row dr in ds.DataTable1)
{
if(ds.DataTable1.FindById(dr.Id) != dr)
Console.Write(dr.Id);
}
FindByIdは常に同じ行を返すため、コンソールに行は書き込まれません。これは本当に論理的です。私のプロジェクトのコードでは、いくつかの文字列列を持つ同様のデータセットを使用して、行の約3%(常に同じ行!)ではなく、文字列フィールドの1つは空です:
ds.DataTable1.FindById(dr.Id) != dr // returns false, for whatever reason
主キーは唯一の主キーフィールドであるため、FindByIdは生成されたメソッドです。誰かが少しヒントを知っているか、以前に同じ問題を経験しましたか?このバグや機能を有効にした非常に特別なケースだと思います。 :)
列挙によって行われたキャストによって生成される可能性について考えました。列挙子は、生成された型付き行のDataRow
基本型で機能します。しかし、私はそこで何か間違ったことを見つけませんでした...
乾杯 マティアス
解決
主キーのタイプは何ですか? DataSetには、Guid(および場合によっては他の値)を比較するための微妙なバグがあります。 Guidエラーは特定のGuid値にのみ関係し、通常はうまく機能します。
注:バグがあると言うとき、バグレポートが受け入れられたことは知っていますが、修正されたかどうかはわかりません
所属していません StackOverflow