表达树究竟是什么意思?

时间:2010-07-28 20:33:42

标签: .net linq lambda expression-trees

好的,我只是不明白。

我已经尽可能多地阅读了关于这个主题的内容而不知道它的全部内容:

  • 为什么要使用Expression Trees?
  • 我何时以及如何使用它们的真实例子是什么?
  • 使用它们有什么整体利益?

6 个答案:

答案 0 :(得分:3)

表达式树基本上是作为数据处理的解码位代码。然后,您的程序可以在运行时根据需要解释该数据。这允许您根据业务逻辑解释代码。

假设您需要定义业务规则。您可以基于C#为它们定义语法,然后直接在源代码中编写新规则。通过将它作为表达式树接受到引擎中,解析,语法检查和类型检查的繁琐工作已经为您完成。您只需要遍历树并应用规则。

答案 1 :(得分:3)

最初编写表达式树API是为了能够创建自定义LINQ提供程序。基本上,如果您使用LINQ to Objects,则不使用表达式树。但是如果你使用LINQ to SQL,LINQ提供程序就可以使用Expression Trees。

在.Net 4.0中,Expression Tree API得到了扩展,并被DLR大量使用。所以,如果你打算让一个新的动态语言添加到.NET中,你就需要它。

正如经常发生的那样,人们发现了更多使用表达树的方法。有时您可以使用ET来获取有关对象的更多信息,而不是反射。在.NET 4中,您还可以使用它们来生成动态方法。但请记住,这些更像是高级技巧,而不是推荐的方案。

以下是一些您可以查看的链接:

Expression Tree Basics

Getting Information About Objects, Types, and Members with Expression Trees

Generating Dynamic Methods with Expression Trees in Visual Studio 2010

答案 2 :(得分:2)

它们确实非常有用。

每个lambda表达式都可以成为方法树或表达式树。

显然,方法在框架中是原生的。

表达式树可以转换为其他表示。例如,LINQ for SQL将查询表达式转换为SQL语法并在服务器上远程执行它们。

答案 3 :(得分:2)

当你写这样的东西时:

var q = from d in Data.Table
        where d.Name == "SomeName"
        select d

将其转换为表达式树。当你再次使用这个linq查询SQL时,底层的Linq-to-SQL使用这个树来进行高性能的SQL查询。

所以你在场景中使用'你正在做linq的东西。

您可以构建自己的表达式树。如果您想进行动态查询,这可能非常有用。这可能是不同类型的搜索条件。您甚至可以使用它来使用where-clause和其他很酷的东西进行多个内部联接,即使不知道您正在使用的类型。这虽然需要做一些反思。

答案 4 :(得分:0)

假设您正在为LINQ编写查询提供程序(例如,将LINQ查询转换为SQL的SQL Server提供程序) - 也许您是数据库供应商,并且您希望实现对数据库引擎的支持。您将使用表达式树来构建您的sql。

答案 5 :(得分:0)

它们非常有用。 除了linq to sql之外,它们还用于在mvc 2.0中创建strongly typed html helpers或提供使用GPU进行数学计算的方法,即Brahma project

基本上,表达式树提供了解释编译表达式而不是执行它的能力。所以它们是用C#创建一种DSL的手段。