sql >> Databáze >  >> RDS >> Mysql

zatímco na IDataReader.Read nefunguje s výnosem, ale foreach na čtečce ano

Není to while vs foreach to dělá ten rozdíl. Je to volání .Cast<T>() .

V prvním vzorku dáváte výnos stejně objekt v každé iteraci cyklu while. Pokud si nedáte pozor, dokončíte iterátor výnosu před skutečným použitím dat a DataReader již bude zlikvidován. To se může stát, pokud byste například zavolali .ToList() po zavolání této metody. Nejlepší, v co můžete doufat, by bylo, aby každý záznam v seznamu měl stejnou hodnotu.
(Pro tip:většinou nechcete volat .ToList() dokud nezbytně musíte. Je lepší pracovat pouze s IEnumerable records).

Ve druhém příkladu, když zavoláte .Cast<T>() na čtečce dat efektivně vytváříte kopii dat při jejich iteraci každým záznamem. Nyní již neposkytujete stejný objekt.



  1. Chyba připojení PDO při použití symfony a MAMP

  2. XAMPP S PHP/MySQL běží opravdu pomalu

  3. Použití proměnných php uvnitř příkazu vložení MySQL

  4. Jak naformátuji číslo s čárkami v T-SQL?