表达树

use*_*364 5 c# asp.net expression-trees

我对表达式树的理解是:

表达式树是表达式的内存表示,如算术或布尔表达式.表达式存储在已解析的树中.因此我们可以轻松地转换为任何其他语言.

Linq to SQL使用表达式树.通常在LINQ to SQL查询中,编译器将其转换为已解析的表达式树.它们作为T-SQL语句传递给Sql Server.Sql server执行T-SQL查询并将结果发送回去.这就是执行时的原因LINQ to SQLIQueryable<T>得不到IEnumetrable<T>.因为IQuerybale包含

public IQueryable:IEnumerable
{

   Type Element {get;}
   Expression Expression {get;}
   IQueryaleProvider Provider {get;}
}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. Microsoft使用Expression树来玩LINQ-to-Sql.我可以使用表达式树来增强代码的不同方法.

  2. 除了LINQ to SQL,Linq到amazon,谁在他们的应用程序中使用了表达式树?

  3. Linq to Object返回IEnumerable,Linq to SQL返回IQueryable,LINQ to XML返回什么?

Aar*_*ght 11

表达式树提供了一种在运行时实际编译之前检查某些代码的方法.

您可以使用表达式树完成两件事:

  • 使用Expression.Compile或者将其编译为委托
  • 访问树节点并从中生成其他内容(即SQL语句).

表达式树很酷,但它们实际上对典型网站或企业应用程序有任何直接用处的可能性很小.只有在(a)想要在运行时从C#源生成不同类型的代码时,或者(b)想要使用Reflection但提供一些编译时安全性时,才会使用它们.

如果您正在研究可重用的库 - DI框架,AOP框架,MVC/MVP/MVVM框架,ORM框架等,或者尝试扩展其中一个框架(包括Linq-to-XYZ),那么您可能会发现用于表达式树(例如Linq to SQL 批量更新扩展),虽然很难讨论具体的例子,因为它完全取决于这种框架的设计.

如果你没有构建这些工具,那么表达树只不过是一种好奇心.很高兴当然要学习 - 但如果你没有找到太多的实际用途,不要失望.

使用表达式树的库的一些示例:

...这应该让你了解那些认真使用表达式树的项目.因此,如果您正在构建自己的运行时环境或MVC,那么您肯定希望了解所有可能的内容.;)