Ativando uma fonte de dados para LINQ consultar
Há várias maneiras de estender LINQ Para habilitar qualquer fonte de dados a ser consultado na LINQ padrão. A fonte de dados pode ser uma estrutura de dados, um serviço Web, um sistema de arquivos ou um banco de dados, para citar alguns.The LINQ padrão torna mais fácil para os clientes consultar uma fonte de dados para o qual LINQ consultando está ativado, porque a sintaxe e o padrão da consulta não é alterado. As maneiras em que LINQ pode ser estendido para esses dados fontes incluem o seguinte:
Implementando o IEnumerable<T> interface em um tipo para habilitar LINQ para consultar objetos desse tipo.
Criando operador de consulta padrão métodos, sistema autônomo Where e Select que estender um tipo, para habilitar personalizado LINQ consultando desse tipo.
Criar um provedor de fonte de dados que implementa o IQueryable<T> interface. Um provedor que implementa esta interface recebe LINQ consultas na forma de árvores de expressão, ele pode executar de forma personalizada, por exemplo remotamente.
Criar um provedor de fonte de dados que aproveita uma existente LINQ tecnologia. Como um provedor permite não somente consulta, mas também inserção, atualização e as operações de excluir e mapeamento para tipos definidos pelo usuário.
Este tópico aborda essas opções.
Como ativar o LINQ consultar da sua fonte de dados
Dados na memória
Há duas maneiras de você pode habilitar LINQ consulta de dados na memória. Se os dados de um tipo que implementa IEnumerable<T>, você pode consultar os dados usando LINQ para objetos. Se não faz sentido habilitar enumeração do seu tipo, Implementando o IEnumerable<T> interface, você pode definir LINQ padrão métodos operadores nesse tipo de consulta ou criar LINQ métodos de operadores de consulta padrão que se estendem do tipo. Implementações personalizadas dos operadores de consulta padrão devem usar execução retardada para retornar os resultados.
Dados remoto
A melhor opção para habilitar a LINQ consulta de uma fonte de dados remota é implementar o IQueryable<T> interface. No entanto, isso é diferente da extensão de um provedor, sistema autônomo LINQ to SQL para uma fonte de dados. Nenhum modelo de provedor para estender existente LINQ tecnologias, sistema autônomo LINQ to SQL, para outros tipos de fonte de dados estão disponível em Visual Studio 2008.
Provedores de LINQ IQueryable
LINQ provedores de implementar IQueryable<T> podem variar amplamente de sua complexidade. Esta seção discute os diferentes níveis de complexidade.
A menos complexos IQueryable provedor pode interface com um único método de um serviço Web, sistema autônomo o provedor que é criado o Demonstra Passo a passo: Criando um provedor IQueryable LINQ tópico. Esse tipo de provedor é muito específico porque espera informações específicas em consultas que ele manipula.Ele tem um sistema de tipos fechados, talvez expondo um tipo de resultado única.A maior parte da execução da consulta ocorre localmente, por exemplo, usando o Enumerable implementações de operadores de consulta padrão. Um provedor menos complexo pode examinar apenas um método telefonar expressão na árvore de expressão que representa a consulta e permita que a lógica restante da consulta ser tratado em outro lugar.
An IQueryable fornecedor de média complexidade pode uma fonte de dados que tenha uma linguagem de consulta parcialmente expressivo de destino. Se destina a um serviço Web, ele pode interface com mais de um método do serviço Web e selecionar o método para chamar com base na pergunta que representa a consulta.Um fornecedor de complexidade média seria ter um sistema de tipos mais sofisticado que um simples fornecedor, mas ainda seria um sistema de tipo fixo.Por exemplo, o provedor pode expõe tipos que possuem relacionamentos um-para-muitos que podem ser percorridos, mas não forneceriam tecnologia de mapeamento para tipos definidos pelo usuário.
Um complexo IQueryable provedor, sistema autônomo o LINQ to SQL provedor, pode traduzir concluída LINQ consultas para um linguagem de consulta expressiva, sistema autônomo SQL. Um provedor complexo é mais geral de um provedor menos complexo, porque pode manipular uma variedade maior de perguntas a consulta. Ele também possui um sistema de tipo em aberto e, portanto, deve conter uma infra-estrutura abrangente para mapear tipos definidos pelo usuário.Desenvolver um provedor complexo requer uma quantidade significativa de esforço.
Consulte também
Tarefas
Demonstra Passo a passo: Criando um provedor IQueryable LINQ
Conceitos
Visão geral de operadores de consulta padrão