谁负责将LINQ espression树转换为本机SQL?
当使用ORM并使用LINQ编写查询时,谁负责将LINQ espression树转换为本机SQL?是ORM本身,还是CLR?还是别的什么?正如Philippe在评论中所说,ORM就是这样做的。CLR只是将LINQ表达式编译为表达式树,并将此对象传递给与ORM相关的 然后该谁负责将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执行计划,然后在将来的查询中使
IQueryProvider
使用自定义类解析该表达式。然后基于解析结果——ORM生成纯SQL代码,执行并具体化结果
一些ORM对此过程进行了优化。例如,实体框架将解析后的信息保存在内存中,类似于SQL执行计划,然后在将来的查询中使用它,所以它只解析一次,然后重用从表达式树解析的数据
若表达式树并没有链接的参数,那个么它很简单。否则,它需要在每次执行时重新对其进行部分分析,以使用参数并使用它们生成SQL。正如Philippe在评论中所说,ORM可以做到这一点。CLR只是将LINQ表达式编译为表达式树,并将此对象传递给与ORM相关的 然后该
IQueryProvider
使用自定义类解析该表达式。然后基于解析结果——ORM生成纯SQL代码,执行并具体化结果
一些ORM对此过程进行了优化。例如,实体框架将解析后的信息保存在内存中,类似于SQL执行计划,然后在将来的查询中使用它,所以它只解析一次,然后重用从表达式树解析的数据
若表达式树并没有链接的参数,那个么它很简单。否则,每次执行都需要重新对其进行部分分析,以使用参数并生成SQL。是ORM进行翻译是ORM进行翻译这些正是我要寻找的信息!Thx SERGEY这些正是我要找的信息!Thx谢尔盖