Avatar ·

Qual é a diferença entre IEnumerable<T> e IQueryable<T> em C# e quando usar cada um?

Olá, colegas! Sou novo em C# e estou trabalhando com Entity Framework. Fico constantemente confuso sobre quando retornar IEnumerable e quando retornar IQueryable. Aqui está um método que tenho no repositório: ```csharp public IEnumerable GetProductsByCategory(int categoryId) { return _context.Products.Where(p => p.CategoryId == categoryId).ToList(); } ``` Mas outro desenvolvedor disse que é melhor usar IQueryable. Eu reescrevi: ```csharp public IQueryable GetProductsByCategory(int categoryId) { return _context.Products.Where(p => p.CategoryId == categoryId); } ``` Agora tenho um service que chama esse método e depois filtra: ```csharp var cheapProducts = repo.GetProductsByCategory(1).Where(p => p.Price < 100).ToList(); ``` No primeiro caso (com IEnumerable) tudo funciona, mas é lento. No segundo (com IQueryable) é mais rápido, mas não entendo por quê. Expliquem, por favor, qual é a diferença fundamental? Quando devo usar IEnumerable e quando IQueryable?