Udostępnij za pośrednictwem


Join — Klauzula (Visual Basic)

Łączy dwie kolekcje do pojedynczego kolekcji.Operacja join opiera się na pasujące klucze i używa Equals operatora.

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

Części

  • element
    Wymagane.Zmienna kontrolna dla kolekcji jest przyłączony.

  • collection
    Wymagane.Kolekcja połączyć się ze zbioru, identyfikowane po lewej stronie Join operatora.A Join klauzuli można zagnieździć w innym Join klauzuli, lub w Group Join klauzuli.

  • joinClause
    Opcjonalne.Jeden lub więcej dodatkowych Join klauzul dalsze uściślenie kwerendy.

  • groupJoinClause
    Opcjonalne.Jeden lub więcej dodatkowych Group Join klauzul dalsze uściślenie kwerendy.

  • key1 Equals key2
    Wymagane.Identyfikuje kluczy kolekcji jest przyłączony.Należy użyć Equals operatora porównania kluczy z kolekcji jest przyłączony.Warunki sprzężenia można połączyć za pomocą And operatora do identyfikowania wielu kluczy.key1musi być z kolekcji po lewej stronie Join operatora.key2musi być z kolekcji po prawej stronie Join operatora.

    Klawisze używane w warunku sprzężenia może być wyrażeń, które zawierają więcej niż jeden element z kolekcji.Każde wyrażenie klucza może jednak zawierać tylko elementy z jej odpowiednimi kolekcji.

Uwagi

Join Klauzuli łączy dwie kolekcje oparte na dopasowanie wartości klucza z kolekcji jest przyłączony.Kolekcja wynikowy może zawierać dowolną kombinację wartości ze zbioru, identyfikowane po lewej stronie Join operatora i kolekcji w Join klauzuli.Kwerenda będzie zwracać tylko wyniki dla których warunek określony przez Equals operator jest spełniony.Jest to równoważne INNER JOIN w języku SQL.

Można użyć wielu Join klauzule kwerendy do dwóch lub więcej zbiorów do pojedynczego kolekcji.

Można wykonać sprzężenie niejawna połączyć kolekcje bez Join klauzuli.Aby to zrobić, należy dołączyć wiele In klauzule na From klauzuli i określić Where klauzuli, która identyfikuje klucze, które chcesz użyć dla sprzężenia.

Można użyć Group Join klauzuli połączyć kolekcji do pojedynczego hierarchicznej kolekcji.Przypomina to LEFT OUTER JOIN w języku SQL.

Przykład

Poniższy przykład kodu wykonuje sprzężenie niejawna połączyć listę klientów z ich zamówień.

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

Poniższy przykład kodu łączy dwie kolekcje za pomocą Join klauzuli.

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

W tym przykładzie da dane wyjściowe podobne do następujących:

winlogon (968), Windows Logon

explorer (2424), File Explorer

cmd (5136), Command Window

Poniższy przykład kodu łączy dwie kolekcje za pomocą Join klauzuli z dwiema kolumnami klucza.

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

Przykład da dane wyjściowe podobne do następujących:

winlogon (968), Windows Logon, Priority = 13

cmd (700), Command Window, Priority = 8

explorer (2424), File Explorer, Priority = 8

Zobacz też

Informacje

Select — Klauzula (Visual Basic)

From — Klauzula (Visual Basic)

Group Join — Klauzula (Visual Basic)

Where — Klauzula (Visual Basic)

Koncepcje

Wprowadzenie do LINQ w Visual Basic

Inne zasoby

Zapytania (Visual Basic)