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

Para escrever consultas com eficiência, 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 são fortemente tipadas 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 de 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 para objetos consultar operação que não realiza nenhum transformações de dados. 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 de 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 a operação de consulta que executa uma transformação simple nos dados. A consulta leva uma seqüência de Customer objetos como entrada e seleciona somente a Name a 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 de 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 de tipo de custNameQuery é string, e não Customer.

  3. Porque custNameQuery é uma seqüência de cadeias 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 de um pouco 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 de fonte de dados é sempre o tipo de 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.

Deixar o compilador para 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 para 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 Implicitamente digitado variáveis locais (TRANSLATION FROM VPE FOR CSHARP 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#