IQueryable, IEnumerable e IList (dotnet)

Estamos sujeitos a trabalhar com algum tipo de lista. Lista de usuário, lista de compras e etc.
Já pensou como podemos trabalhar da melhor maneira com essa infinidade de listas que estamos sujeitos?
Nesse tópico vamos conhecer as principais maneiras de se trabalhar com lista de dados e suas principais diferenças!
Collections são estruturas que possibilitam manipular grande quantidades de dados de maneira rápida e flexível.
IQueryable
Interface específica que contém um provedor de consulta (LINQ-To-SQL). Conseguimos criar um query filter de consulta na base de dados utilizando a linguagem LINQ e o retorno podemos transformar em um IEnumerable para maximizar a manipulação do resultado.
var query = dbUser.AsQueryble().Where(x => x.id == 1);
Nessa query a execução vai buscar exatamente o usuário de Id igual a 1 (um) na base de dados (Carregando na memória somente o necessário).
IEnumerable
Geralmente utilizado para processar elementos já carregados em memória.
Você pode fazer a consulta na base de dados utilizando um IEnumerable, mas essa busca retornará todos os elementos e seu filtro será feito em memória.
var query = dbUser.Where(x => x.Id == 1);
Nesse cenário o filtro é executado no Server, a consulta carrega a lista de usuário em memória e faz a filtragem dos dados (where).
IList
Coleção de dados não genéricos (precisa ser especificada o tipo de lista) que podem ser acessados através de um enumerador. IList é descendente de ICollection, base de todas as lista não genéricas.
Temos 3 categorias:
- Leitura;
A lista não pode ser modificada, imutável. - Tamanho Fixo;
Lista de tamanho fixo, se na sua criação a lista for criada com 3 elementos, até o final do processo teremos 3 elementos. Permite a edição dos elementos já estabelecidos. - Tamanho variável;
Permite adicionar, remover e modificar os item dessa lista. Geralmente utilizamos essa padrão de lista.