Pergunta

I fazer mais e mais exercício com Lambda mas eu não descobrir por algum exemplo de uso .AsQueryable(); que usar o IQueryable e em algum momento ele omitir a .AsQueryable(); e usar o IEnumerable.

Eu li o MSDN mas eu não ver como "execução de uma árvore de expressão" é uma vantagem sobre não.

Qualquer um pode explicar isso para mim?

Foi útil?

Solução

implementa IQueryable IEnumerable, tão logo de cara, com IQueryable, você pode fazer tudo o que você pode fazer com IEnumerable. IQueryables lidar com a conversão de alguma expressão lambda para consulta na fonte de dados subjacente - este poderia ser um banco de dados SQL, ou um conjunto de objetos.

Basicamente, você deve geralmente não tem que cuidar de uma forma ou de outra, se for um IQueryable, ou um IEnumerable.

Outras dicas

Como um usuário, você geralmente não precisa se preocupar, é realmente sobre o implementador da fonte de dados. Se os provedores de dados apenas implementa IEnumerable, você está fazendo basicamente LINQ para execução objetos, ou seja, ele está em operação de memória em coleções. IQueryable fornece a fonte de dados a capacidade de traduzir a árvore de expressão em uma representação alternativa para execução uma vez que a expressão é executado (geralmente por enumeração), que é o que Linq2Sql, Linq2Xml e Linq2Entities fazer.

A única vez que eu posso ver o carinho usuário final, é se eles desejam inspecionar a árvore de expressão que seria executado, uma vez que IQueryable expõe Expression. Outro uso pode ser inspecionando o provedor. Mas ambos os cenários realmente deve ser reservada para implementadores de outros provedores de consulta e quer transformar a expressão. O ponto de Linq é que você não deve ter que se preocupam com a implementação da execução expressão a ser utilizado.

Eu concordo com Arne Claassen, há casos em que você precisa pensar sobre o implmentatoin subjacentes, emitida pelo fontes de dados. Por exemplo verificar isso href="http://jonkruger.com/blog/2007/10/19/iqueryable-vs-ienumerable-in-linq-to-sql-queries/" rel="nofollow noreferrer"> blogue post que mostra como o SQL gerado pelo IEnumerable e IQueryable são diferentes em determinados cenários.

scroll top