Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谁负责将LINQ espression树转换为本机SQL?_Linq_Orm_Expression Trees - Fatal编程技术网

谁负责将LINQ espression树转换为本机SQL?

谁负责将LINQ espression树转换为本机SQL?,linq,orm,expression-trees,Linq,Orm,Expression Trees,当使用ORM并使用LINQ编写查询时,谁负责将LINQ espression树转换为本机SQL?是ORM本身,还是CLR?还是别的什么?正如Philippe在评论中所说,ORM就是这样做的。CLR只是将LINQ表达式编译为表达式树,并将此对象传递给与ORM相关的 然后该IQueryProvider使用自定义类解析该表达式。然后基于解析结果——ORM生成纯SQL代码,执行并具体化结果 一些ORM对此过程进行了优化。例如,实体框架将解析后的信息保存在内存中,类似于SQL执行计划,然后在将来的查询中使

当使用ORM并使用LINQ编写查询时,谁负责将LINQ espression树转换为本机SQL?是ORM本身,还是CLR?还是别的什么?

正如Philippe在评论中所说,ORM就是这样做的。CLR只是将LINQ表达式编译为表达式树,并将此对象传递给与ORM相关的

然后该
IQueryProvider
使用自定义类解析该表达式。然后基于解析结果——ORM生成纯SQL代码,执行并具体化结果

一些ORM对此过程进行了优化。例如,实体框架将解析后的信息保存在内存中,类似于SQL执行计划,然后在将来的查询中使用它,所以它只解析一次,然后重用从表达式树解析的数据


若表达式树并没有链接的参数,那个么它很简单。否则,它需要在每次执行时重新对其进行部分分析,以使用参数并使用它们生成SQL。

正如Philippe在评论中所说,ORM可以做到这一点。CLR只是将LINQ表达式编译为表达式树,并将此对象传递给与ORM相关的

然后该
IQueryProvider
使用自定义类解析该表达式。然后基于解析结果——ORM生成纯SQL代码,执行并具体化结果

一些ORM对此过程进行了优化。例如,实体框架将解析后的信息保存在内存中,类似于SQL执行计划,然后在将来的查询中使用它,所以它只解析一次,然后重用从表达式树解析的数据


若表达式树并没有链接的参数,那个么它很简单。否则,每次执行都需要重新对其进行部分分析,以使用参数并生成SQL。

是ORM进行翻译是ORM进行翻译这些正是我要寻找的信息!Thx SERGEY这些正是我要找的信息!Thx谢尔盖