首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表达式树

表达式树
EN

Stack Overflow用户
提问于 2010-03-28 16:40:58
回答 5查看 2.7K关注 0票数 5

我对表达树的理解是:

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

Linq使用表达式树。通常,在Linq到SQL查询中,编译器会将其转换为解析的表达式树。这些语句作为T语句传递给Server .SQL服务器执行The查询并将结果发回.这就是为什么当您执行Linq到SQL时,您得到的是IQueryable<T>而不是IEnumerable<T>;因为IQueryable包含

代码语言:javascript
复制
public IQueryable : IEnumerable
{
   Type Element {get;}
   Expression Expression {get;}
   IQueryableProvider Provider {get;}
}

问题:

  1. Microsoft在LINQ中使用表达式树。有什么不同的方法可以使用表达式树来提升代码呢?
  2. 除了Linq,Linq到amazon,谁在应用程序中使用表达式树?
  3. LINQ返回IEnumerable,LINQ返回IQueryable,LINQ返回什么?
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-28 17:02:00

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

可以使用表达式树精确地完成两件事:

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

表达式树很酷,但它们对典型的网站或企业应用程序有任何直接用处的可能性是很小的。只有在以下情况下才会使用它们:(a)希望在运行时从C#源生成不同类型的代码;或(b)希望使用反射,但提供某种程度的编译时安全性。

如果您正在开发可重用库-- DI框架、AOP框架、MVC/MVP/MVVM框架、ORM框架等等,或者试图扩展其中的一个框架(包括Linq到-XYZ),那么您可能会发现表达式树(例如Linq到SQL 批更新扩展)的用途,尽管很难讨论具体的例子,因为它完全取决于这样一个框架的设计。

如果你不是在构建这类工具,那么表达式树只不过是一种好奇。当然,很高兴了解到--但是如果你没有发现太多的实际用途,就不要失望。

几个使用表达式树的库示例:

  • 尼尼特
  • Autofac
  • ASP.NET MVC框架本身
  • NHibernate Linq (当然还有到SQL/EF/等的Linq )
  • .NET 4 动态语言运行时

...That应该让您了解如何认真使用表达式树的项目。因此,如果您正在构建您自己的运行时环境或MVC,您肯定希望了解您所能了解的一切。;)

票数 11
EN

Stack Overflow用户

发布于 2010-03-28 16:44:47

  1. 你说“提升我的代码”是什么意思? 表达式树(通常)不会提高性能;它们用于启用其他功能。
  2. 表达式树与LINQ无关。例如,依赖注入系统使用它们来指定类型并有效地发挥作用。
  3. LINQ返回IEnumerable<XElement>的。
票数 3
EN

Stack Overflow用户

发布于 2010-03-29 21:29:35

我建议在这里阅读一些文章:http://blogs.msdn.com/csharpfaq/archive/tags/expression+trees/default.aspx

我写信给他们是为了回答像这样的问题。我试着给出一些基础知识,并展示一些有趣的技巧,您可以使用LINQ和DLR之外的表达式树来实现这些技巧。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2533649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档