我有一个 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 表达式
- Lambda 表达式到表达式树
- 表达式树到 SQL 语句
- SQL 语句被执行
所以,我的问题是何时以及如何翻译和执行?
我知道第 4 阶段发生在运行时,当我的“carIds”变量在 foreach 循环中被访问时。
foreach(var carId in carIds) // here?
{
Console.Writeline(carId) // or here?
}
其他阶段呢?它们什么时候发生?在编译时还是运行时?在哪一行(在定义上或定义之后,访问时还是在访问之前)?