为什么使用表达式树

MyD*_*ons 2 .net expression-trees

我不知道为什么我要阅读表达式树,但我是。因此,我不了解该对象,也不了解它的使用地点或方式。

在这里阅读其他问题,例如什么是表达式树以及如何使用它们以及为什么要使用它们?(以及他们引用的链接),我现在对表达式树有了更好的理解,但是,我仍然不知道为什么使用它。

关于原因,我见过的唯一示例是 Linq to SQL 之类的东西 - 但是当您对其进行更多调查时,它似乎实际上更多地是关于它与IQueryable<T>界面的使用。

表达式树是否仅与IQueryable 接口结合使用(使用)?

Pau*_*ner 5

这有点同义反复,但答案是“无论何时你需要理解一个表达式”。

我从初级开发人员那里看到的一个常见问题是“Func<T>和”有什么区别Expression<Func<T>>?对于大多数情况,后者需要您调用Compile()表达式来获取它所代表的函数,但除此之外它们似乎做同样的工作。

表达式树让编译器将通常是指令的内容嵌入为可探索的表达式树。如果您正在编写的内容不仅需要了解函数的结果,还需要了解调用者如何构造他们的函数,表达式树可以为您捕捉到这一点。

在差异变得相关之前,您必须知道表达式是如何组成的。

我只见过以两种方式使用的表达式:

  1. 创建 LINQ 提供程序(如 LINQ-to-SQL)来解释表达式并将其转换为另一种语言。如您所知,这涉及到实施IQueryable并且是一个大交易™。
  2. 从对象中捕获属性访问器(如 Razor HTML Helpers),这样不仅可以访问值,还可以使用属性名称来生成事物(如 HTML 字段名称)。

常见的任务往往是某种翻译成另一种语言。对于 LINQ 提供程序,它是将查询直接翻译成另一种查询语言。在 Razor 的情况下,它是将属性转换为 HTML 字段。