当然不是。首先语言和编译器无关,其次语言和它编译的目标也无关。严格来说,现在的C#编译器已经是多目标的编译器了,常规代码被编译为IL,但是其实LINQ调用被编译为存储表达式,而C#还可以编译为Sliverlight的运行时支持的中间语言(可以视作IL的精简版)以及本地代码。

解决方案 »

  1.   

    IL应该是由CLR中的JIT编译器再次编译成本地代码才能运行的吧, 像你说的LINQ调用被编译为存储表达式,是不是代表着它不再被托管,没有被托管的话CLR就对他不起作用了吧,那它如何在本地执行呢,谢谢,有点乱
      

  2.   

    IL应该是由CLR中的JIT编译器再次编译成本地代码才能运行的吧, 像你说的LINQ调用被编译为存储表达式,是不是代表着它不再被托管,没有被托管的话CLR就对他不起作用了吧,那它如何在本地执行呢,谢谢,有点乱
    你可以理解为编译器将抽象语法树保存在了程序中,而没有翻译成最终代码。
    这些存储的表达式可以被LINQ Provider模块理解和翻译成SQL,而SQL被数据库系统解释执行(在SQL那一端)。
    当然LINQ Provider并非都是将存储表达式翻译为SQL的,你甚至可以写一个Provider将存储表达式拿到另一台计算机上执行。