Avatar ·

¿Por qué usar Expression<Func<T>> en lugar de Func<T> en C#? Diferencia con ejemplos

Hola, colegas. Empecé a estudiar C# y me topé con algo llamado Expression>. A primera vista, tanto Func como Expression> se ven igual cuando escribo lambdas. Pero, ¿para qué se necesita ese "Expression"? Aquí hay un ejemplo simple. Tengo un método que acepta Func: ```csharp public void Filter(Func predicate) { var numbers = new List {1, 2, 3, 4, 5}; var result = numbers.Where(predicate).ToList(); // hago algo con result } ``` Lo llamo así: `Filter(x => x > 3);` — funciona. Pero he visto que en Entity Framework a menudo se usa Expression>. Por ejemplo: ```csharp public IQueryable GetData(Expression> predicate) { return dbSet.Where(predicate); } ``` ¿Cuál es la diferencia fundamental? ¿Por qué no se puede usar simplemente Func en todos lados? Entiendo que Expression está relacionado con árboles de expresión, pero no logro captar para qué sirve en la práctica. ¿Cuándo debo elegir Expression y cuándo...