Compartilhar via


LINQ to TerraServer provedor Sample

Esse exemplo é um personalizado LINQ provedor do serviço Web TerraServer EUA. Ele também contém um aplicativo cliente de exemplo que usa o personalizadoLINQ provedor de consultar o serviço de dados geográficos.

serviço Web TerraServer USA expõe um método que retorna informações sobre locais nos Estados Unidos, quando o método é determinado parte ou todo um nome de local.Esse método, chamado GetPlaceList, é o método que o LINQ provedor de chamadas para obter os dados que o LINQ consulta é executada em relação. O provedor usa Windows Communication Foundation (WCF) para se comunicar com serviço Web. Para obter mais informações sobre serviço Web TerraServer USA, consulte Visão geral dos serviços da Web do TerraServer EUA.

A LINQ provedor que implementa o IQueryable<T> interface sistema autônomo esta, permite LINQ consultas a serem gravados em relação à fonte de dados que o provedor se conecta ao. Um provedor pode executar a funcionalidade de consulta nos dados ou ele pode traduzir o LINQ consulta em uma linguagem de consulta é apropriada para a fonte de dados que ele se conecta. Esse provedor obtém dados de serviço Web e, em seguida, modifica o original da consulta de modo que LINQ para objetos lida com a execução da consulta.

Observação de segurança:

Esse código de exemplo é destinado a ilustrar um conceito, e ele mostra somente o código que é relevante para esse conceito. Ele pode não atender aos requisitos de segurança de um ambiente específico e não deve ser usado exatamente como mostrado. Recomendamos que você adicione código de segurança e tratamento de erros para tornar seus projetos tão seguros e robustos quanto for conveniente. A Microsoft fornece esse código de exemplo "Zoom, Para Cima e Ampliar encontra" sem garantias.

Para obter exemplos e instruções para instalá-los

  • Siga um ou mais destes procedimentos:

    • Sobre o Ajuda menu, clicar Exemplos.

      O arquivo Leiame exibe informações sobre exemplos.

    • Visite o Exemplos do Visual Studio 2008 Site da Web.As versões mais recentes dos exemplos estarão disponíveis nele.

Para obter mais informações, consulte Localizando arquivos de exemplo.

Observação:

Essa amostra só está disponível online.

Para executar o aplicativo cliente no Visual Studio

  1. Abra o arquivo LinqToTerraServerProvider.sln no Visual Studio.

  2. In O gerenciador de soluções, clicar com o botão direito do mouse o LinqToTerraServerProvider projeto e, em seguida, clique em Compilação.

  3. No menu Debug, clique em Start Without Debugging.

Requisitos

São necessários os seguintes componentes para executar esse exemplo:

  • Visual Studio 2008

Demonstra

Este exemplo demonstra como implementar IQueryable<T>, IOrderedQueryable<T>, e IQueryProvider.

Decisões de design

A tabela a seguir lista os arquivos no projeto LinqToTerraServerProvider.

File

Descrição

Evaluator.cs

Parcialmente avalia a árvore de expressões da consulta.Isso significa que todas as referências de variáveis locais no LINQ consulta de valores.

ExpressionTreeHelpers.cs

Contém métodos que podem ser usados para determinar informações sobre e extrair dados de tipos específicos de árvores de expressão.

ExpressionTreeModifier.cs

Uma subclasse de visitante de árvore de expressão que modifica a árvore de expressão que representa o total LINQ consulta.

ExpressionVisitor.cs

A classe de visitante de árvore de expressão base.

InnermostWhereFinder.cs

Uma subclasse de visitante de árvore de expressão que localiza a expressão na árvore de expressão de consulta que representa a telefonar mais interna para o Where método. Essa expressão mais interno é a expressão que o provedor extrai os locais de Pesquisar da.

InvalidQueryException.cs

Define uma exceção é acionada quando é enviada uma consulta inválido.

LocationFinder.cs

Uma subclasse de visitante de árvore de expressão que extrai informações sobre o local do LINQ consulta para usar na solicitação de serviço Web. Essa classe compreende informações sobre local fornecidas em uma das seguintes formas:

  • Uma expressão de igualdade, por exemplo, place.Name == "Seattle".

  • Uma expressão de telefonar de método para o método StartsWith, por exemplo place.Name.StartsWith("Seat").

  • Uma expressão de telefonar de método para os métodos Enumerable.Contains e List<T>.Contains, por exemplo placeList.Contains(place.Name).

Place.cs

Define um tipo .NET personalizado para representar os dados do serviço Web.

QueryableTerraServerData.cs

Contém o tipo que a consulta de cliente define consultas.Esse tipo implementa IOrderedQueryable<T> para oferecer suporte a operações de classificar na consulta. Porque IOrderedQueryable<T> deriva da IQueryable<T>, por meio da implementação IOrderedQueryable<T> Esse tipo também implementa IQueryable<T>.

TerraServerQueryContext.cs

Contém uma classe que organiza o trabalho de execução de uma consulta.

TerraServerQueryProvider.cs

Contém o tipo que implementa o IQueryProvider interface. Os métodos que essa interface define são chamados pelos métodos de operador de consulta padrão definidos no Queryable, para executar a consulta.

TypeSystem.cs

Essa classe auxiliar implementa um método que é usado para fornecer o tipo de elemento da coleção genérica que contém os resultados da consulta.

WebServiceHelper.cs

Obtém dados de serviço Web.Esse código contém duas verificações que melhoram a usabilidade da biblioteca do provedor.A primeira verificação limita o time máximo que um aplicativo cliente aguardará uma resposta, limitando o número total de chamadas feitas para serviço Web por consulta cinco.A segunda seleção determina se o número de resultados retornados pelo serviço Web é igual ao número máximo de resultados que pode retornar.Se o número de resultados é o número máximo, é provável que os resultados do serviço Web são truncados.Em vez de retornar uma lista incompleta para o cliente, o provedor lança uma exceção.

A tabela a seguir lista os arquivos no projeto ClientApp.

File

Descrição

programa.cs

Contém três exemplo LINQ consulta que consulta o QueryableTerraServerData tipo definido no projeto LinqToTerraServerProvider.

App.config

Contém um ponto de extremidade que define como o aplicativo deve se comunicar com serviço Web.

Para uma discussão mais detalhada do design deste personalizado LINQ provedor, consulte Demonstra Passo a passo: Criar um provedor de LINQ IQueryable.

Consulte também

Tarefas

Como: Implementar um visitante de árvore de expressão

Outros recursos

Exemplos do LINQ translation from VPE for Csharp