Retornar IEnumerable<T> ou IQueryable<T> em C#: qual a diferença e o que escolher?
Olá a todos! Sou um desenvolvedor C# iniciante, trabalho com Entity Framework e LINQ. Frequentemente vejo no código dos colegas que eles retornam de métodos às vezes `IEnumerable`, às vezes `IQueryable`. No começo, pensei que eram intercambiáveis, mas depois notei um comportamento estranho.
Aqui está um exemplo. Tenho um método que obtém uma lista de pedidos:
```csharp
public IEnumerable GetOrders()
{
using (var db = new MyDbContext())
{
return db.Orders.Where(o => o.IsActive);
}
}
```
Depois eu o chamo e aplico uma filtragem adicional:
```csharp
var orders = GetOrders().Where(o => o.Total > 100).ToList();
```
Eu esperava que fosse enviado ao banco uma única consulta SQL com duas condições (`IsActive = true AND Total > 100`), mas o profiler mostra que primeiro são selecionados todos os pedidos ativos, e depois a filtragem por `Total` ocorre na memória da aplicação! Isso é extremamente lento se houver muitos pedidos.
E se eu mudo o tipo de retorno para `IQueryable`, tudo funciona como esperado — no SQL é gerado
No answers yet.
Faça login para deixar uma resposta