Condividi tramite


Clausola Join (Visual Basic)

Combina due raccolte in un'unica raccolta.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
    Necessario.La variabile di controllo per la raccolta da unire.

  • collection
    Necessario.La raccolta da combinare con la raccolta identificata sul lato sinistro dell'operatore Join.Una clausola Join può essere annidata in un'altra clausola Join o in una clausola Group Join.

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

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

  • key1Equalskey2
    Necessario.Identifica le chiavi per le raccolte da unire.È necessario utilizzare l'operatore Equals per confrontare le chiavi dalle raccolte da unire.È possibile combinare condizioni di join utilizzando l'operatore And per identificare più chiavi.Il parametro key1 deve provenire dalla raccolta sul lato sinistro dell'operatore Join.Il parametro key2 deve provenire dalla raccolta sul lato destro dell'operatore Join.

    Le chiavi utilizzate nella condizione di join possono essere espressioni che includono più di un elemento della raccolta.Tuttavia ogni espressione di chiave può contenere solo elementi della rispettiva raccolta.

Note

La clausola Join combina due raccolte in base ai valori chiave corrispondenti delle raccolte da unire.La raccolta risultante può contenere qualsiasi combinazione di valori dalla raccolta identificata sul lato sinistro dell'operatore Join e dalla raccolta identificata 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ù raccolte in un'unica raccolta.

È possibile eseguire un join implicito per unire raccolte 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ù raccolte in un' unica raccolta gerarchica.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 unite due raccolte 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), File Explorer

cmd (5136), Command Window

Nell'esempio di codice seguente viene illustrato come unire due raccolte 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), File Explorer, Priority = 8

Vedere anche

Riferimenti

Clausola Select (Visual Basic)

Clausola From (Visual Basic)

Clausola Group Join (Visual Basic)

Clausola Where (Visual Basic)

Concetti

Introduzione a LINQ in Visual Basic

Altre risorse

Query (Visual Basic)