O foreach executa a consulta apenas uma vez?

Eu tenho uma lista de itens e uma consulta LINQ sobre eles. Agora, com a execução adiada do LINQ, um loop foreach subsequente executaria a consulta apenas uma vez ou para cada turno no loop?

Dado este exemplo (retirado deIntrodução às consultas LINQ (C #), no 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);
    }

Ou, em outras palavras,haveria alguma diferença se eu tivesse:

    foreach (int num in numQuery.ToList())

E, isso importaria se os dados subjacentes não estivessem em uma matriz, mas em um banco de dados?

questionAnswers(4)

yourAnswerToTheQuestion