Condividi tramite


Clausola Join (Visual Basic)

Aggiornamento: novembre 2007

Combina due insiemi in un unico insieme. L'operazione di join è basata sulla corrispondenza di chiavi e utilizza l'operatore Equals.

Join element In collection _
  [ joinClause _ ] 
  [ groupJoinClause ... _ ] 
On key1 Equals key2 [ And key3 Equals key4 [... ]

Parti

  • element
    Obbligatorio. La variabile di controllo per l'insieme da unire.

  • collection
    Obbligatorio. L'insieme da combinare con l'insieme identificato sul lato sinistro dell'operatore Join. Una clausola Join può essere nidificata in un'altra clausola Join o in una clausola Group Join.

  • joinClause
    Facoltativo. Uno o più clausole Join aggiuntive per perfezionare la query.

  • groupJoinClause
    Facoltativo. Uno o più clausole Group Join aggiuntive per perfezionare la query.

  • key1Equalskey2
    Obbligatorio. Identifica le chiavi per gli insiemi da unire. È necessario utilizzare l'operatore Equals per confrontare le chiavi dagli insiemi da unire. È possibile combinare le condizioni di join utilizzando l'operatore And per identificare più chiavi. key1 deve essere relativa all'insieme sul lato sinistro dell'operatore Join. key2 deve essere relativa all'insieme sul lato destro dell'operatore Join.

    Le chiavi utilizzate nella condizione di join possono essere espressioni che includono più di un elemento dell'insieme. Tuttavia ogni espressione di chiave può contenere solo elementi del rispettivo insieme.

Note

La clausola Join combina due insiemi in base ai valori chiave corrispondenti degli insiemi da unire. L'insieme risultante può contenere qualsiasi combinazione di valori dall'insieme identificato sul lato sinistro dell'operatore Join e dall'insieme identificato nella clausola Join. La query restituirà solo risultati per cui la condizione specificata dall'operatore Equals è soddisfatta. Equivale ad un INNER JOIN in SQL.

È possibile utilizzare più clausole Join in una query per unire due o più insiemi in un unico insieme.

È possibile eseguire un join implicito per unire insiemi senza la clausola Join. Per eseguire questa operazione, includere più clausole In nella clausola From e specificare una clausola Where che identifica le chiavi da utilizzare per il join.

È possibile utilizzare la clausola Group Join per combinare più insiemi in un unico insieme gerarchico. Equivale a LEFT OUTER JOIN in SQL.

Esempio

Nell'esempio di codice seguente viene illustrato come eseguire un join implicito per combinare un elenco di clienti con i rispettivi ordini.

Dim customerIDs() = {"ALFKI", "VICTE", "BLAUS", "TRAIH"}

Dim customerList = From cust In customers, custID In customerIDs _
                   Where cust.CustomerID = custID _
                   Select cust.CompanyName

For Each companyName In customerList
  Console.WriteLine(companyName)
Next

Nell'esempio di codice seguente vengono uniti due insiemi utilizzando la clausola Join.

Imports System.Diagnostics
Imports System.Security.Permissions

Public Class JoinSample

  <SecurityPermission(SecurityAction.Demand)> _
  Public Sub ListProcesses()
    Dim processDescriptions As New List(Of ProcessDescription)
    processDescriptions.Add(New ProcessDescription _
                            With {.ProcessName = "explorer", _
                                  .Description = "Windows Explorer"})
    processDescriptions.Add(New ProcessDescription _
                            With {.ProcessName = "winlogon", _
                                  .Description = "Windows Logon"})
    processDescriptions.Add(New ProcessDescription _
                            With {.ProcessName = "cmd", _
                                  .Description = "Command Window"})
    processDescriptions.Add(New ProcessDescription _
                            With {.ProcessName = "iexplore", _
                                  .Description = "Internet Explorer"})

    Dim processes = From proc In Process.GetProcesses _
                    Join desc In processDescriptions _
                      On proc.ProcessName Equals desc.ProcessName _
                    Select proc.ProcessName, proc.Id, desc.Description

    For Each proc In processes
      Console.WriteLine("{0} ({1}), {2}", _
                        proc.ProcessName, proc.Id, proc.Description)
    Next
  End Sub

End Class

Public Class ProcessDescription
  Public ProcessName As String
  Public Description As String
End Class

In questo esempio viene prodotto un output simile al seguente:

winlogon (968), Windows Logon

explorer (2424), Windows Explorer

cmd (5136), Command Window

Nell'esempio di codice seguente viene illustrato come unire due insiemi utilizzando la clausola Joincon due colonne di chiavi.

Imports System.Diagnostics
Imports System.Security.Permissions

Public Class JoinSample2

  <SecurityPermission(SecurityAction.Demand)> _
  Public Sub ListProcesses()
    Dim processDescriptions As New List(Of ProcessDescription2)

    ' 8 = Normal priority, 13 = High priority
    processDescriptions.Add(New ProcessDescription2 _
                            With {.ProcessName = "explorer", _
                                  .Description = "Windows Explorer", _
                                  .Priority = 8})
    processDescriptions.Add(New ProcessDescription2 _
                            With {.ProcessName = "winlogon", _
                                  .Description = "Windows Logon", _
                                  .Priority = 13})
    processDescriptions.Add(New ProcessDescription2 _
                            With {.ProcessName = "cmd", _
                                  .Description = "Command Window", _
                                  .Priority = 8})
    processDescriptions.Add(New ProcessDescription2 _
                            With {.ProcessName = "iexplore", _
                                  .Description = "Internet Explorer", _
                                  .Priority = 8})

    Dim processes = From proc In Process.GetProcesses _
                    Join desc In processDescriptions _
                      On proc.ProcessName Equals desc.ProcessName _
                         And proc.BasePriority Equals desc.Priority _
                    Select proc.ProcessName, proc.Id, desc.Description, _
                           desc.Priority

    For Each proc In processes
      Console.WriteLine("{0} ({1}), {2}, Priority = {3}", _
                        proc.ProcessName, _
                        proc.Id, _
                        proc.Description, _
                        proc.Priority)
    Next
  End Sub

End Class

Public Class ProcessDescription2
  Public ProcessName As String
  Public Description As String
  Public Priority As Integer
End Class

In questo esempio viene prodotto un output simile al seguente:

winlogon (968), Windows Logon, Priority = 13

cmd (700), Command Window, Priority = 8

explorer (2424), Windows Explorer, Priority = 8

Vedere anche

Concetti

Introduzione a LINQ in Visual Basic

Riferimenti

Clausola Select (Visual Basic)

Clausola From (Visual Basic)

Clausola Group Join (Visual Basic)

Clausola Where (Visual Basic)

Altre risorse

Query (Visual Basic)