7

以下のような 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'

フェーズは次のとおりです。

  1. LINQ to Lambda 式
  2. 式ツリーへのラムダ式
  3. 式ツリーから SQL ステートメントへ
  4. SQL ステートメントが実行される

それで、私の質問は、これがいつ、どのように翻訳され、実行されるのかということです。

「carIds」変数が foreach ループ内でアクセスされると、実行時にフェーズ 4 が発生することがわかっています。

foreach(var carId in carIds) // here?
{
  Console.Writeline(carId) // or here?
}

他のフェーズはどうですか?それらはいつ発生しますか?コンパイル時または実行時?どの行 (定義上または定義後、アクセス時またはアクセス前)?

4

2 に答える 2