¿Foreach ejecuta la consulta solo una vez?
Tengo una lista de artículos y una consulta LINQ sobre ellos. Ahora, con la ejecución diferida de LINQ, ¿un bucle foreach subsiguiente ejecutará la consulta solo una vez o para cada turno en el bucle?
Dado este ejemplo (tomado deIntroducción a las consultas LINQ (C #), en 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);
}
O, en otras palabras,¿Habría alguna diferencia si tuviera:
foreach (int num in numQuery.ToList())
Y, ¿importaría, si los datos subyacentes no están en una matriz, sino en una base de datos?