sql >> Base de Datos >  >> RDS >> Mysql

mientras que en IDataReader.Read no funciona con retorno de rendimiento pero foreach en lector sí

No es while frente a foreach eso hace la diferencia. Es la llamada a .Cast<T>() .

En la primera muestra, estás cediendo en el mismo objeto en cada iteración del ciclo while. Si no tiene cuidado, terminará habiendo completado el iterador de rendimiento antes de usar los datos y el DataReader ya se eliminará. Esto puede suceder si, por ejemplo, llamara a .ToList() después de llamar a este método. Lo mejor que puede esperar es que todos los registros de la lista tengan el mismo valor.
(Consejo profesional:la mayoría de las veces no desea llamar a .ToList() hasta que sea absolutamente necesario. Es mejor trabajar solo con registros IEnumerable).

En el segundo ejemplo, cuando llamas a .Cast<T>() en el lector de datos, está haciendo efectivamente una copia de los datos a medida que itera a través de cada registro. Ahora ya no estás dando el mismo objeto.