DataSet: Enumerator и FindById не возвращают равные DataRow - PullRequest
0 голосов
/ 25 июня 2009

Сегодняшняя проблема в моем коде довольно странная, и я пока не могу ее воспроизвести. Я работаю с типизированным набором данных (созданным с помощью дизайнера) и зацикливаюсь на всех строках таблицы данных.

Иногда (!) При поиске по первичному ключу возвращаемая строка не совпадает со строкой из перечислителя. Вот код, который я написал, чтобы воспроизвести проблему:

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 Ответ

2 голосов
/ 25 июня 2009

Какой у вас первичный ключ? DataSet имеет небольшую ошибку для сравнения Guids (и, возможно, других значений). Ошибка Guid имеет отношение только к определенным значениям Guid и обычно работает хорошо.

примечание: когда я говорю, что есть ошибка, я имею в виду, что я знаю, что сообщение об ошибке было принято, но я не знаю, исправлено ли оно также

...