Tipo relacionamentos em operações consulta (LINQ)
Para escrever consultas com eficiência, você deve compreender como tipos de variáveis em uma operação de consulta completa todos se relacionam entre si.Se você compreender esses relacionamentos será mais fácil compreender as o LINQ amostras e exemplos de código na documentação. Além disso, você compreenderá o que ocorre em segundo plano quando variáveis forem digitadas implicitamente usando var.
LINQ operações de consulta são fortemente tipadas na fonte de dados, a consulta em si e a execução da consulta. O tipo de variáveis da consulta deve ser compatível com o tipo de elementos na fonte de dados e com o tipo de variável de iteração no foreach demonstrativo. Este tipagem forte garante que erros de tipo são detectados no momento da compilar quando eles podem ser corrigidos antes que os usuários encontrá-los.
Para demonstrar essas relações de tipo, a maioria dos exemplos a seguir usa digitação explícita para todas as variáveis.O último exemplo mostra como os mesmos princípios aplicam mesmo quando você usa a digitação implícita usando var.
Consultas que não transformar os dados de fonte
A ilustração a seguir mostra um LINQ a operação de consulta de objetos que não realiza transformações de nenhum nos dados. A fonte contém uma sequência de cadeias de caracteres e a saída da consulta também é uma sequência de cadeias de caracteres.
O argumento do tipo da fonte de dados determina o tipo de variável de intervalo.
O tipo de objeto selecionado determina o tipo da variável de consulta.Aqui name é uma seqüência de caracteres. Portanto, a variável de consulta é um IEnumerable<string>.
A variável de consulta iterada no foreach demonstrativo. Como a variável de consulta é uma sequência de cadeias de caracteres, a variável de iteração também é uma sequência de caracteres.
Consultas que Transform os dados de fonte
A ilustração a seguir mostra um LINQ to SQL operação de consulta executa uma transformação simples nos dados. A consulta leva uma sequência de Customer objetos sistema autônomo entrada e seleciona apenas a Name propriedade no resultado. Porque Name é uma sequência de caracteres, a consulta produz uma sequência de cadeias de caracteres sistema autônomo saída.
O argumento do tipo da fonte de dados determina o tipo de variável de intervalo.
The select demonstrativo retorna a Name propriedade em vez do completo Customer objeto. Porque Name é uma seqüência de caracteres, o argumento Tipo do custNameQuery é string, não Customer.
Porque custNameQuery é uma sequê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 um pouco mais complexa.The select demonstrativo retorna um tipo anônimo que captura apenas dois membros do original Customer objeto.
O argumento do tipo da fonte de dados sempre é o tipo da variável de intervalo na consulta.
Porque o select demonstrativo produz um tipo anônimo, a variável de consulta deve ser digitada implicitamente, usando var.
Porque o tipo da variável de consulta está implícito, da variável de iteração no foreach loop também deve ser implícito.
Permitir que o compilador inferir informações de tipo
Embora você deve compreender as relações de tipo em uma operação de consulta, você tem 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:
Para obter mais informações sobre o var, consulte Digitada implicitamente variáveis Local (C# Guia de programação).