¿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?

Respuestas a la pregunta(4)

Su respuesta a la pregunta