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?

questionAnswers(4)

yourAnswerToTheQuestion