Compartilhar via


Relações de tipo em operações de consulta do LINQ (C#)

Para escrever consultas com eficácia, você deve entender como os tipos de variáveis em uma operação de consulta completa a todos os se relacionam entre si.Se você compreender esses relacionamentos será mais fácil compreender o LINQ amostras e exemplos de código na documentação.Além disso, você entenderá o que ocorre nos bastidores, quando as variáveis são digitadas implicitamente, usando var.

LINQoperações de consulta tem rigidez de tipos na fonte de dados, a consulta em si e a execução da consulta.O tipo das variáveis na consulta deve ser compatível com o tipo dos elementos na fonte de dados e com o tipo da variável de iteração na foreach instrução.Este tipagem forte garante que os erros de tipo são detectados em tempo de compilação quando eles podem ser corrigidos antes que os usuários se deparar com elas.

Para demonstrar essas relações de tipo, a maioria dos exemplos a seguir usa a digitação explícita para todas as variáveis.O último exemplo mostra como os mesmos princípios se aplicam mesmo quando você usa a digitação implícita usando var.

Consultas que não transformar os dados de origem

A ilustração a seguir mostra um LINQ operação que não realiza nenhum transformações nos dados de consulta para objetos.A fonte contém uma seqüência de cadeias de caracteres e a saída da consulta também é uma seqüência de cadeias de caracteres.

Relação de tipos de dados em uma consulta LINQ

  1. O argumento de tipo da fonte de dados determina o tipo de variável de intervalo.

  2. O tipo do objeto selecionado determina o tipo de variável de consulta.Aqui name é uma seqüência de caracteres.Portanto, a variável de consulta é um IEnumerable<string>.

  3. A variável de consulta é iterada na foreach instrução.Como a variável de consulta é uma seqüência de cadeias de caracteres, a variável de iteração também é uma seqüência de caracteres.

Consultas que transformam os dados de origem

A ilustração a seguir mostra um LINQ to SQL operação que executa uma transformação simple nos dados de consulta.A consulta usa uma seqüência de Customer objetos como entrada e seleciona somente a Name propriedade no resultado.Porque Name é uma seqüência, produz o consulta uma seqüência de cadeias de caracteres como saída.

Uma consulta que transforma o tipo de dados

  1. O argumento de tipo da fonte de dados determina o tipo de variável de intervalo.

  2. O select instrução retorna a Name propriedade em vez do completo Customer objeto.Porque Name é uma seqüência, o argumento Tipo do custNameQuery é string, e não Customer.

  3. Porque custNameQuery é uma seqüência de seqüências de caracteres, o foreach variável de iteração do loop também deve ser um string.

A ilustração a seguir mostra uma transformação ligeiramente mais complexa.O select instrução retorna um tipo anônimo que captura apenas dois membros do original Customer objeto.

Uma consulta que transforma o tipo de dados

  1. O argumento de tipo da fonte de dados é sempre o tipo da variável de intervalo na consulta.

  2. Porque o select instrução produz um tipo anônimo, a variável de consulta deve ser digitada implicitamente, usando var.

  3. Porque o tipo da variável de consulta está implícito, a variável de iteração na foreach loop também deve ser implícito.

Permitindo que o compilador a inferir o tipo de informações

Embora você deve compreender as relações de tipo em uma operação de consulta, você tem a opção para permitir que o compilador fazer todo o trabalho por você.A palavra-chave var pode ser usado para qualquer variável local em uma operação de consulta.A ilustração a seguir é exatamente equivalente ao número de exemplo 2 foi discutido anteriormente.A única diferença é que o compilador irá fornecer o tipo de alta segurança para cada variável na operação de consulta:

Fluxo de tipos com tipagem implícita

Para obter mais informações sobre o var, consulte Variáveis de locais digitadas implicitamente (C# Guia de programação).

Consulte também

Conceitos

Relações de tipo em operações de consulta (Visual Basic)

Outros recursos

Guia de Introdução do LINQ em C#