アイテムのリストとそれらに対する LINQ クエリがあります。さて、LINQ の遅延実行では、後続の foreach ループはクエリを 1 回だけ実行するのでしょうか、それともループ内のターンごとに実行するのでしょうか?
この例を考えると ( MSDN の Introduction to LINQ Queries (C#) から取得)
// 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);
}
または、言い換えれば、私が持っていた場合、違いはありますか:
foreach (int num in numQuery.ToList())
また、基礎となるデータが配列ではなくデータベースにある場合は問題になるでしょうか?