以下のような LINQ to SQL クエリがあります。
var carIds = from car in _db.Cars
where car.Color == 'Blue'
select car.Id;
上記は、最終的に以下の sql に変換されます。
select Id from Cars
where Color = 'Blue'
フェーズは次のとおりです。
- LINQ to Lambda 式
- 式ツリーへのラムダ式
- 式ツリーから SQL ステートメントへ
- SQL ステートメントが実行される
それで、私の質問は、これがいつ、どのように翻訳され、実行されるのかということです。
「carIds」変数が foreach ループ内でアクセスされると、実行時にフェーズ 4 が発生することがわかっています。
foreach(var carId in carIds) // here?
{
Console.Writeline(carId) // or here?
}
他のフェーズはどうですか?それらはいつ発生しますか?コンパイル時または実行時?どの行 (定義上または定義後、アクセス時またはアクセス前)?