¿Qué es exactamente Expression <> utilizado en C#? ¿Hay algún escenario en el que instanciarías Expression <> como objeto? Si es así, ¡da un ejemplo!C# .NET 3.5: ¿Para qué se utiliza Expression <>?
¡Gracias!
¿Qué es exactamente Expression <> utilizado en C#? ¿Hay algún escenario en el que instanciarías Expression <> como objeto? Si es así, ¡da un ejemplo!C# .NET 3.5: ¿Para qué se utiliza Expression <>?
¡Gracias!
Expression<T>
se utiliza casi por completo para LINQ, pero no tiene para ser. Dentro de LINQ, generalmente se usa para "capturar" la lógica expresada en el código, pero mantenerlo en los datos. Luego, los datos pueden ser examinados por el proveedor de LINQ y manejados de manera apropiada, por ej. convirtiéndolo en SQL. Por lo general, los árboles de expresión en LINQ son creados por el compilador a partir de expresiones lambda o expresiones de consulta, pero en otros casos puede ser útil usar la API directamente usted mismo.
Algunos ejemplos de otros lugares lo he usado y visto que se usa:
long
y ulong
tienen diferentes intervalos)Eche un vistazo a mi antes de & después del código en my answer to another SO question.
Resumen: Expression<>
simplificó enormemente el código, lo hizo más fácil de entender, e incluso solucionó un error fantasma.
En términos de LINQ, hay cosas que puede hacer para crear consultas LINQ más versátiles en tiempo de ejecución de lo que puede hacer simplemente en lambdas.
He utilizado Expression
muchas veces como microcompilador, como alternativa a DynamicMethod
y IL. Este enfoque se hace más fuerte en .NET 4.0 (as discussed on InfoQ), pero incluso en 3.5 hay un montón de cosas que puede hacer (por lo general basado en datos de tiempo de ejecución; configuración, etc):
también utilicé como parte de un motor de matemáticas para algunos wo Lo hice con Microsoft, es decir, analizar una expresión matemática ("(x + 12) * y = z", etc.) en un árbol Expression
, compilarlo y ejecutarlo.
Otro uso intersting (ilustrado por Jason Bock, here) se encuentra en la programación genética; construye tus candidatos como árboles Expression
, y tienes el código necesario para ejecutarlos rápidamente (después de Compile()
), pero lo más importante (para la programación genética), también para intercambiar fragmentos.
¿Hay algún lugar donde podamos ver el código que hiciste para Microsoft? Realmente me gustaría ver algunos ejemplos de este tipo de cosas ... – flesh
Tengo una copia, pero no creo que sea sensato publicarla "tal cual" (es propiedad conjunta de mi empleador y Microsoft) Trataré de encontrar tiempo para volver a hacer desde el principio: no es mucho, escribí el original en el tren camino al Reading HQ de Microsoft; –
¿dónde puedo ver 'VisualLINQ'? – flesh
Vaya, se supone que debe incluir un enlace a la publicación del blog. Espera ... –