A ativação de uma fonte de dados para a consulta do LINQ
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 da Web, um sistema de arquivos ou um banco de dados, para citar alguns. O LINQ padrão torna fácil para os clientes consultar uma fonte de dados para o qual LINQ consultando está habilitado, porque a sintaxe e o padrão da consulta não são alteradas. As maneiras em que LINQ pode ser estendido para esses dados fontes incluem o seguinte:
Implementando o IEnumerable<T> interface em um tipo de habilitar LINQ a consulta de objetos do tipo.
Criando métodos operadores de consulta padrão como Where e Select que estender um tipo, para habilitar personalizado LINQ a consulta do 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, o que ela pode ser executada de maneira personalizada, por exemplo remotamente.
Criar um provedor de fonte de dados que aproveita uma existente LINQ tecnologia. Tal provedor permitiria não apenas consultando, mas também insert, update e delete operações e mapeamento para tipos definidos pelo usuário.
Este tópico aborda essas opções.
Como habilitar a consulta do LINQ da sua fonte de dados
Dados na memória
Há duas maneiras, você pode habilitar LINQ consulta de todos os dados na memória. Se os dados de um tipo que implementa IEnumerable<T>, você pode consultar os dados usando o LINQ a objetos. Se ele não faz sentido para habilitar a enumeração do seu tipo, Implementando o IEnumerable<T> interface, você pode definir LINQ padrão de métodos de operador 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 a execução retardada para retornar os resultados.
Dados remotos
A melhor opção para habilitar LINQ consultando-se de uma fonte de dados remotos é implementar a IQueryable<T> interface. No entanto, isso difere Estendendo um provedor, como LINQ to SQL para uma fonte de dados. Nenhum modelo de provedor para estender existentes LINQ tecnologias, como LINQ to SQL, outros tipos de fonte de dados estão disponíveis em Visual Studio 2008.
Provedores IQueryable LINQ
LINQos provedores que implementam IQueryable<T> podem variar amplamente de sua complexidade. Esta seção discute os diferentes níveis de complexidade.
Um menos complexo IQueryable provedor pode interagir com um único método de um serviço da Web. Esse tipo de provedor é muito específico, pois ele espera que as informações específicas nas consultas que ele manipula. Ele tem um sistema de tipo fechado, 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 de menos complexo pode examinar a expressão de chamada de apenas um método na árvore de expressão que representa a consulta e permitem a lógica restante da consulta a ser tratado em outro lugar.
Um IQueryable provedor de média complexidade pode destinar a uma fonte de dados que tem uma linguagem de consulta parcialmente expressiva. Se destina a um serviço da Web, ele talvez interface com mais de um método do serviço da Web e selecione o método de chamada com base na pergunta que representa a consulta. Um provedor de média complexidade teria um sistema de tipo mais sofisticado do que um provedor simples, mas ainda seria um sistema de tipo fixo. Por exemplo, o provedor pode expor os tipos que possuem relacionamentos um-para-muitos que podem ser percorridos, mas não forneceriam a tecnologia de mapeamento para tipos definidos pelo usuário.
Um complexo IQueryable provedor, como o LINQ to SQL provedor, pode traduzir completa consultas deLINQ para uma linguagem de consulta expressiva, como, por exemplo, SQL. Um provedor de complexo é mais geral que um provedor de menos complexo, porque pode manipular uma variedade maior de perguntas na consulta. Ele também possui um sistema de tipo aberto e, portanto, deve conter uma infra-estrutura abrangente para mapear tipos definidos pelo usuário. Desenvolvendo um provedor complexo requer um esforço significativo.
Para obter mais informações sobre como criar seu próprio provedor LINQ, consulte Demonstra Passo a passo: Criando um provedor IQueryable LINQ tópico e LINQ: A criação de um provedor IQueryable e Link para tudo: Uma lista de provedores LINQ postagens em Blogs do MSDN.
Consulte também
Tarefas
Demonstra Passo a passo: Criando um provedor IQueryable LINQ
Referência
Conceitos
Visão geral operadores de consulta padrão