DataSet: Enumerator e findById não retornam igual DataRow
-
20-08-2019 - |
Pergunta
O problema de hoje no meu código é uma espécie de estranho, e eu não poderia reproduzi-lo ainda. Eu estou trabalhando com um dataset tipado (criado com o designer) e estou looping sobre todas as linhas em uma tabela de dados.
Às vezes (!), Quando encontrar via chave primária, a linha retornada não é igual ao do recenseador. Isto é algum código que eu escrevi para reproduzir o problema:
foreach(DataSet1.DataTable1Row dr in ds.DataTable1)
{
if(ds.DataTable1.FindById(dr.Id) != dr)
Console.Write(dr.Id);
}
Nenhuma linha será gravada no console, porque findById sempre retorna a mesma linha, o que é muito lógico. No código do meu projeto, com um conjunto de dados semelhante com algumas colunas de corda, em cerca de 3% das linhas (sempre as mesmas linhas!) Isso não acontecer, e um dos campos de corda é apenas vazio:
ds.DataTable1.FindById(dr.Id) != dr // returns false, for whatever reason
A chave primária é o único campo chave primária, e por isso findById é um método gerado. Alguém sabe uma pequena dica ou fez experimentar o mesmo problema antes? Eu tenho medo é um caso muito especial que eu fiz que permite que este bug ou recurso. :)
Eu pensei sobre a possibilidade deste ser produzidos pelo elenco feito pela enumeração. O enumerador funciona com o tipo base DataRow
das linhas digitadas gerados. Mas eu não encontrar algo de errado lá ...
Felicidades Matthias
Solução
O que é o tipo de você chave primária? o DataSet tem um bug sutil para comparar Guids (e possivelmente outros valores). O erro Guid só tem a ver com certos valores Guid e geralmente funciona bem.
Nota: Quando eu digo que tem um bug, eu quero dizer que eu sei que um relatório de bug foi aceite, mas eu não sei se ele foi correção bem