Czy foreach wykonuje zapytanie tylko raz?
Mam nad nimi listę elementów i zapytanie LINQ. Czy w przypadku odroczonego wykonania LINQ następna pętla foreach wykona zapytanie tylko raz lub dla każdego obrotu pętli?
Biorąc pod uwagę ten przykład (zaczerpnięty zWprowadzenie do zapytań LINQ (C #) w MSDN)
// The Three Parts of a LINQ Query:
// 1. Data source.
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
// 2. Query creation.
// numQuery is an IEnumerable<int>
var numQuery =
from num in numbers
where (num % 2) == 0
select num;
// 3. Query execution.
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
Lub, innymi słowy,czy byłaby jakakolwiek różnica, gdybym miał:
foreach (int num in numQuery.ToList())
Czy ma to znaczenie, jeśli dane bazowe nie znajdują się w tablicy, ale w bazie danych?