Compartilhar via


Tipo relacionamentos em operações de consulta (Visual Basic)

Variáveis usadas na LINQ (consulta integrada à linguagem) operações de consulta são fortemente tipadas e devem ser compatível entre si. Tipagem forte é usado na fonte de dados, na própria consulta e na execução de consulta.A ilustração a seguir identifica os termos usados para descrever um LINQ consulta. Para obter mais informações sobre as partes de uma consulta, consulte Operações de consulta básica (Visual Basic).

Partes de uma consulta LINQ

O tipo da variável de intervalo da consulta deve ser compatível com o tipo dos elementos na fonte de dados.O tipo da variável de consulta deve ser compatível com o elemento sequência definido no Select cláusula. Finalmente, o tipo de sequência elementos também deve ser compatível com o tipo da variável de controle de loop é usado no For Each demonstrativo que executa a consulta. Este tipagem forte facilita a identificação do tipo erros em time de compilar.

Visual Basic 2008 conveniente tipagem forte Implementando inferência de tiposs de tipo de variável local, também conhecido sistema autônomo digitação implícita.Esse recurso é usado no exemplo anterior, e você verá usado em todo o LINQ Exemplos e documentação. No Visual Basic, inferência de tiposs de tipo de variável local é realizado simplesmente usando um Dim demonstrativo sem um As cláusula. No exemplo a seguir, city é fortemente tipados sistema autônomo uma seqüência de caracteres.

Dim city = "Seattle"
Observação:

inferência de tiposs de tipo de variável local funciona somente quando Option Infer é definida como On.Para obter mais informações, consulte Declaração Option Infer.

No entanto, mesmo que você use inferência de tiposs de tipo de variável local em uma consulta, as mesmas relações de tipo estão presentes entre as variáveis na fonte de dados, a variável de consulta e o loop de execução da consulta.Ele é útil ter noções básicas sobre essas relações de tipo quando você está escrevendo LINQ consultas, ou trabalhar com amostras e exemplos de código na documentação.

Consultas que retornar toda elementos de dados de fonte

O exemplo a seguir mostra um LINQ operação de consulta que retorna uma sequência de elementos selecionados dos dados de fonte. A fonte, names, contém uma matriz de cadeias de caracteres, e a saída da consulta é uma sequência contendo seqüências de caracteres que começam com a letra M.

Dim names = New String() {"John", "Rick", "Maggie", "Mary"}
Dim mNames = From name In names _
             Where name.IndexOf("M") = 0 _
             Select name

For Each nm In mNames
    Console.WriteLine(nm)
Next

Isso é equivalente ao código a seguir, mas é muito menor e mais fáceis de escrever.Dependência de inferência de tipos de tipos local nas consultas é o estilo preferido no Visual Basic.

Dim names2() As String = {"John", "Rick", "Maggie", "Mary"}
Dim mNames2 As IEnumerable(Of String) = _
    From name As String In names _
    Where name.IndexOf("M") = 0 _
    Select name

For Each nm As String In mNames
    Console.WriteLine(nm)
Next

Os seguintes relacionamentos existem em ambos os exemplos de código anterior, se os tipos são determinadas implicitamente ou explicitamente.

  1. O tipo de elementos na fonte de dados, names, é o tipo de variável de intervalo, name, na consulta.

  2. O tipo de objeto selecionado, name, determina o tipo de variável de consulta, mNames. Aqui name é uma seqüência de caracteres, portanto, a variável de consulta é IEnumerable (Of String) no Visual Basic.

  3. A consulta definida em mNames é executado nos For Each loop. O loop itera sobre o resultado da execução da consulta.Porque mNames, quando ele é executado, retornará uma sequência de cadeias de caracteres, a variável de iteração do loop, nm, também é uma sequência de caracteres.

Consultas que retornar um campo de elementos selecionados

O exemplo a seguir mostra um LINQ to SQL operação de consulta que retorna uma sequência contendo apenas uma parte de cada elemento selecionado na fonte de dados. A consulta usa um conjunto de Customer objetos sistema autônomo fonte de dados e projetos apenas do Name propriedade no resultado. sistema autônomo o nome do cliente é uma sequência de caracteres, a consulta produz uma sequência de cadeias de caracteres sistema autônomo saída.

' Method GetTable returns a table of Customer objects.
Dim customers = db.GetTable(Of Customer)()
Dim custNames = From cust In customers _
                Where cust.City = "London" _
                Select cust.Name

For Each custName In custNames
    Console.WriteLine(custName)
Next

As relações entre as variáveis são como os de exemplo mais simples.

  1. O tipo de elementos na fonte de dados, customers, é o tipo de variável de intervalo, cust, na consulta. Neste exemplo, se o tipo é Customer.

  2. The Select demonstrativo retorna a Name propriedade de cada Customer objeto em vez de todo o objeto. Porque Name é uma seqüência de caracteres, a variável de consulta custNames, novamente será IEnumerable (Of String), não do Customer.

  3. Porque custNames representa uma sequência de cadeias de caracteres, o For Each variável de iteração do loop, custName, deve ser uma sequência de caracteres.

Sem inferência de tipos de tipos local, o exemplo anterior seria mais complicado para escrever e entender, sistema autônomo mostra o exemplo a seguir.

' Method GetTable returns a table of Customer objects.
 Dim customers As Table(Of Customer) = db.GetTable(Of Customer)()
 Dim custNames As IEnumerable(Of String) = _
     From cust As Customer In customers _
     Where cust.City = "London" _
     Select cust.Name

 For Each custName As String In custNames
     Console.WriteLine(custName)
 Next

Consultas que exigem tipos anônimo

O exemplo a seguir mostra uma situação mais complexa.No exemplo anterior, era inconveniente especificar os tipos para todas as variáveis explicitamente.Neste exemplo, é impossível.Em vez de selecionar toda Customer elementos da fonte de dados ou um único campo de cada elemento, o Select cláusula nesta consulta retorna duas propriedades do original Customer objeto: Name eCity.Em resposta à Select cláusula, o compilador define um tipo anônimo que contém essas duas propriedades. O resultado da execução de nameCityQuery no For Each loop é uma coleção de instâncias do novo tipo anônimo. Como o tipo anônimo não tem nenhum nome utilizável, você não pode especificar o tipo de nameCityQuery ou custInfo explicitamente. Ou seja, com um tipo anônimo, você precisa sem nome de tipo a ser usado no lugar de String em IEnumerable(Of String). Para obter mais informações, consulte Tipos anônimos.

' Method GetTable returns a table of Customer objects.
Dim customers = db.GetTable(Of Customer)()
Dim nameCityQuery = From cust In customers _
                    Where cust.City = "London" _
                    Select cust.Name, cust.City

For Each custInfo In nameCityQuery
    Console.WriteLine(custInfo.Name)
Next

Embora não seja possível especificar os tipos para todas as variáveis no exemplo anterior, os relacionamentos permanecem os mesmos.

  1. O tipo de elementos na fonte de dados novamente é o tipo da variável de intervalo na consulta.Neste exemplo, cust é uma instância de Customer.

  2. Porque o Select demonstrativo produz um tipo anônimo, a variável de consulta nameCityQuery, deve ser digitada implicitamente sistema autônomo um tipo anônimo. Um tipo anônimo não tiver um nome utilizável e, portanto, não pode ser especificado explicitamente.

  3. O tipo de variável de iteração no For Each loop é o tipo anônimo criado na etapa 2. Como o tipo sem nome utilizável, o tipo de variável de iteração de loop deve ser determinado implicitamente.

Consulte também

Conceitos

Tipos anônimos

Inferência de tipos local

Introdução ao LINQ no Visual Basic

Outros recursos

Introdução ao LINQ no Visual Basic

LINQ no Visual Basic

Consultas(Visual Basic)