¿Cuál es la diferencia entre IEnumerable<T> y IQueryable<T> en C# y cuándo usar cada uno?
¡Hola, colegas! Soy nuevo en C# y estoy trabajando con Entity Framework. Constantemente me confundo sobre cuándo devolver IEnumerable y cuándo IQueryable.
Aquí tengo un método en el repositorio:
```csharp
public IEnumerable GetProductsByCategory(int categoryId)
{
return _context.Products.Where(p => p.CategoryId == categoryId).ToList();
}
```
Pero otro desarrollador dijo que es mejor usar IQueryable. Lo reescribí:
```csharp
public IQueryable GetProductsByCategory(int categoryId)
{
return _context.Products.Where(p => p.CategoryId == categoryId);
}
```
Ahora tengo un servicio que llama a este método y luego filtra:
```csharp
var cheapProducts = repo.GetProductsByCategory(1).Where(p => p.Price < 100).ToList();
```
En el primer caso (con IEnumerable) todo funciona, pero es lento. En el segundo (con IQueryable) es más rápido, pero no entiendo por qué.
Expliquen, por favor, ¿cuál es la diferencia fundamental? ¿Cuándo debo usar IEnumerable y cuándo IQueryable?