sql >> Databasteknik >  >> RDS >> Mysql

medan på IDataReader.Read fungerar inte med avkastning men foreach på läsaren gör det

Det är inte while kontra foreach det gör skillnaden. Det är anropet till .Cast<T>() .

I det första provet ger du efter på samma objekt i varje iteration av while-slingan. Om du inte är försiktig har du slutfört avkastningsiteratorn innan du faktiskt använder data, och DataReader kommer redan att kasseras. Detta kan hända om du till exempel skulle anropa .ToList() efter att ha anropat den här metoden. Det bästa du kan hoppas på är att varje post i listan har samma värde.
(Proffstips:oftast vill du inte ringa .ToList() tills du absolut måste. Det är bättre att bara arbeta med IEnumerable records).

I det andra exemplet, när du anropar .Cast<T>() på dataläsaren gör du i praktiken en kopia av data när den itererar genom varje post. Nu ger du inte längre samma objekt.



  1. Avancerad MySQL-anslutning. Påskyndar frågan

  2. Villkorlig MySQL-ordning efter två (lika viktiga) kolumner

  3. Ta bort en del av en sträng i MYSQL

  4. Hur man får alla möjliga kombinationer av rader från två tabeller i SQL