Avatar ·

Por que usar Expression<Func<T>> em vez de Func<T> em C#? Explique com exemplos

Olá a todos! Comecei a estudar C# e me deparei com esta construção: `Expression>`. Entendo que `Func` é apenas um delegate que pode ser chamado. Mas por que envolvê-lo em `Expression<>`? Parece que eu poderia simplesmente passar uma lambda como `Func` e chamá-la quando necessário.\n\nPor exemplo, no Entity Framework, vi que em métodos como `.Where()` frequentemente usam `Expression>`. Mas se eu escrevo `.Where(x => x.Age > 18)`, o compilador já insere o tipo apropriado. Por que eu precisaria especificar `Expression<>` explicitamente?\n\nTenho este código:\n\n```csharp\nFunc square = x => x * x;\nConsole.WriteLine(square(5)); // 25\n```\n\nE este:\n\n```csharp\nExpression> squareExpr = x => x * x;\n// Como usar isso? Simplesmente chamar não funciona.\n```\n\nEu entendo que `Exp