2010-07-28 8 views
9

Ok, simplemente no lo entiendo.¿Cuál es exactamente el sentido de Expression Trees?

He leído acerca de todo lo que pueda sobre el tema sin saber de qué se trata:

  • ¿Por qué usar los árboles de expresión?
  • ¿Cuál es un ejemplo real de cuándo y cómo los usaría?
  • ¿Qué beneficio (s) global (es) hay al usarlos?

Respuesta

3

Expression trees API originalmente se escribió para permitir la creación de proveedores de LINQ personalizados. Básicamente, si usas LINQ to Objects, no tratas con Expression Trees.Pero si trabajas con LINQ en SQL, entonces el proveedor de LINQ funciona con Expression Trees.

En .Net 4.0 Expression Trees API se ha ampliado y DLR lo usa mucho. Entonces, si vamos a agregar un nuevo lenguaje dinámico a .NET, lo necesitará.

Como suele suceder, las personas encontraron más formas de usar árboles de expresiones. A veces puede usar ET para obtener más información sobre objetos en lugar de reflexión. En .NET 4 también puede usarlos para generar métodos dinámicos. Pero recuerde que estos son más como trucos avanzados en lugar de escenarios recomendados.

Éstos son algunos enlaces se puede echar un vistazo a:

Expression Tree Basics

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

Generating Dynamic Methods with Expression Trees in Visual Studio 2010

+0

acaba de leer la entrada del blog - buen trabajo! –

0

Supongamos que está escribiendo un proveedor de consultas para LINQ (por ejemplo, el proveedor de SQL Server que traduce las consultas LINQ a SQL) - tal vez es un proveedor de DB y desea implementar soporte para su motor de base de datos. Usted consumiría los árboles de expresión para construir su sql.

2

De hecho, son muy útiles.

Cada expresión lambda puede convertirse en un método o en un árbol de expresiones.

Los métodos se ejecutan obviamente nativos en el marco.

Los árboles de expresiones se pueden traducir a otra representación. Por ejemplo, LINQ for SQL convierte expresiones de consulta en sintaxis SQL y las ejecuta de forma remota en el servidor.

3

Un árbol de expresiones es esencialmente un fragmento de código analizado como datos. Su programa puede entonces interpretar esos datos como desee en el tiempo de ejecución. Esto le permite interpretar el código a la luz de su lógica comercial.

Supongamos que necesita definir reglas de negocio. Puede definir una sintaxis para ellos basada en C#, y luego tener la nueva regla escrita directamente en el código fuente. Al aceptarlo en su motor como un Árbol de expresiones, el tedioso trabajo de análisis sintáctico y verificación de tipos ya está hecho para usted. Solo tiene que ejecutar el árbol y aplicar la regla.

0

Son bastante útiles. Además de linq a sql se usan para crear un strongly typed html helpers en mvc 2.0 o para proporcionar medios para usar GPU para cálculos matemáticos, es decir, Brahma project.

Básicamente los árboles de expresión dan la capacidad de interpretar una expresión compilada en lugar de ejecutarla. Entonces son medios para crear un tipo de DSL en C#.

2

Cuando su escritura algo como esto:

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

Su transforma en un árbol de expresión. Cuando utiliza esta consulta linq contra SQL, la base Linq-to-SQL utiliza este árbol para realizar una consulta SQL de alto rendimiento.

De modo que se usa "detrás de la escena" en que estás haciendo cosas linq.

Puede construir sus propios árboles de expresiones. Esto podría ser muy útil si desea realizar consultas dinámicas. Este podría ser un tipo diferente de criterio de búsqueda. Incluso podría usarlo para hacer combinaciones internas múltiples con cláusulas where y otras cosas interesantes incluso sin conocer los tipos que está usando por adelantado. Sin embargo, esto requiere una reflexión para hacer.

Cuestiones relacionadas