Avatar ·

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

Olá, colegas. Comecei a estudar C# e me deparei com algo chamado Expression>. Parece que tanto Func quanto Expression> são iguais quando escrevo lambdas. Mas para que serve esse "Expression"? Aqui está um exemplo simples. Tenho um método que aceita Func: ```csharp public void Filter(Func predicate) { var numbers = new List {1, 2, 3, 4, 5}; var result = numbers.Where(predicate).ToList(); // faço algo com result } ``` Eu o chamo assim: `Filter(x => x > 3);` — funciona. Mas vi que no Entity Framework frequentemente usam Expression>. Por exemplo: ```csharp public IQueryable GetData(Expression> predicate) { return dbSet.Where(predicate); } ``` Qual é a diferença fundamental? Por que não posso usar apenas Func em todos os lugares? Entendo que Expression está relacionado a árvores de expressão, mas não consigo entender para que isso serve na prática. Quando devo escolher Expression e quando