A ativação de uma fonte de dados para a consulta do LINQ

Existem várias maneiras de estender LINQ para permitir que sejam consultados de qualquer fonte de dados a 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 mais fácil para os clientes consultar uma fonte de dados para o qual LINQ consultando estiver habilitada, pois 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 permitir que LINQ a consulta de objetos desse tipo.

  • Criando métodos operadores de consulta padrão como 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, o que ele pode executar de forma 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 de sua fonte de dados

Bb882640.collapse_all(pt-br,VS.110).gifDados na memória

Há duas maneiras que 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 por meio de 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 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 a execução retardada para retornar os resultados.

Bb882640.collapse_all(pt-br,VS.110).gifDados remotos

A melhor opção para habilitar LINQ consultar de uma fonte de dados remotos é implementar a IQueryable<T> interface.No entanto, isso é diferente da extensão de um provedor, como LINQ to SQL para uma fonte de dados.Nenhum modelo de provedor para estender existentes LINQ tecnologias, como LINQ to SQL, para outros tipos de fonte de dados estão disponíveis em Visual Studio 2008.

Provedores LINQ IQueryable

LINQprovedores que implementam IQueryable<T> podem variar muito 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 Web.Esse tipo de provedor é muito específico, pois ele espera que a informação específica nas consultas que ele manipula.Ele tem um sistema de tipo fechado, talvez, expondo um tipo único resultado.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 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 se dirigir a uma fonte de dados que tem uma linguagem de consulta parcialmente expressivo.Se destina a um serviço da Web, ele pode interagir com mais de um método do serviço da Web e selecione o método para chamar, com base na pergunta que a consulta representa.Um provedor de complexidade média teria um sistema de tipos mais sofisticado que um simple fornecedor, 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 LINQ consultas para uma linguagem de consulta expressiva, como, por exemplo, SQL. Um provedor de complexo é mais genérico do 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 Passo a passo: Criando um provedor IQueryable LINQ tópico e LINQ: criação de um provedor IQueryable e Link para tudo: uma lista de provedores LINQ postagens em Blogs do MSDN.

Consulte também

Tarefas

Passo a passo: Criando um provedor IQueryable LINQ

Referência

IQueryable<T>

IEnumerable<T>

Enumerable

Conceitos

Visão geral operadores de consulta padrão

LINQ to Objects

Outros recursos

LINQ: Criação de um provedor IQueryable

Link para tudo: uma lista de provedores LINQ