¿Por qué usar Expression<Func<T>> en lugar de Func<T> en C#? Explica con ejemplos
¡Hola a todos! Empecé a estudiar C# y me topé con una construcción como `Expression>`. Está claro que `Func` es solo un delegado que se puede invocar. Pero, ¿por qué envolverlo en `Expression<>`? Parece que simplemente se podría pasar una lambda como `Func` y llamarla cuando sea necesario.
Por ejemplo, en Entity Framework he visto que en métodos como `.Where()` a menudo usan `Expression>`. Pero si escribo `.Where(x => x.Age > 18)`, el compilador mismo asigna el tipo adecuado. ¿Por qué necesito especificar explícitamente `Expression<>`?
Tengo este código:
```csharp
Func square = x => x * x;
Console.WriteLine(square(5)); // 25
```
Y este:
```csharp
Expression> squareExpr = x => x * x;
// ¿Cómo usar esto? Simplemente llamarlo no funcionará.
```
Entiendo que `Expression<>` es un "árbol de expresión", pero no logro captar la diferencia práctica. ¿Cuándo necesito usar `Expression>` y cuándo es suficiente `Func`? ¿Y por qué en algunas bibliotecas...