عبارة Join في (Visual Basic)
تضم مجموعتين في مجموعة مفردة. ربط العملية يستند على مطابقة مفاتيح ويستخدم عامل التشغيل Equals .
Join element In collection _
[ joinClause _ ]
[ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]
الأجزاء
element
مطلوبة. متغير عنصر التحكم لمجموعة يتم ضمها.collection
مطلوبة. المجموعة لتجميعها مع مجموعة معرّفة على الجانب اليسار من عامل التشغيل Join. عبارة Join يمكن أن تتداخل مع جملة أخرى Join أو في جملة Group Join جملة.joinClause
اختياري. واحدة أو أكثر من جملة Join لتنقية الاستعلام.groupJoinClause
اختياري. واحدة أو أكثر من جملة Group Join لتنقية الاستعلام.key1Equalskey2
مطلوبة. تعرّف مفاتيح لمجموعات يتم ضمها. يجب عليك استخدام عامل التشغيل Equals لمقارنة مفاتيح من المجموعات التي يتم ضمها. يمكنك جمع شروط join عن طريق استخدام عامل التشغيل And للتعرف على عدة مفاتيح. key1 يجب أن يكون من المجموعة الجانب اليسار من Join. key2 يجب أن يكون من المجموعة الجانب الأيمن من Join.يمكن أن تكون المفاتيح المستخدمة في شرط join تعبيرات التي تحتوي على عنصر واحد أو أكثر من مجموعة. ومع ذلك، يمكن أن يحتوي تعبير كل المفتاح على العناصر فقط من مجموعة الخاصة به.
ملاحظات
الجملة Join يضم مجموعتين المستندة على مطابقة قيم المفتاح من المجموعة يتم ضمها. يمكن أن تحتوي مجموعة الناتج على أية تركيبة من القيم من مجموعة التعرّف على الجانب الأيمن من عامل التشغيل Join ومجموعة المعرفة في جملة Join. سيقوم الاستعلام بإرجاع نتائج فقط بواسطة الشروط المحددة بعامل التشغيل Equals . هذا المكافئ إلى INNER JOIN في SQL.
يمكنك استخدام عدة عبارات Join في استعلام لضم مجموعات أو أكثر إلى مفرد مجموعة.
يمكنك تنفيذ ربط ضمني ليجمع مجموعات دون جملة Join. لذلك قم بتضمين عدة عبارات In في جملة From و تحديد جملة Where التي تعرف المفاتيح التي تريد لاستخدامها في الصلة.
يمكنك استخدام جملة Group Join لضم مجموعات في مجموعة هرمية. هذا مثل LEFT OUTER JOIN في SQL.
مثال
مثال التعليمات البرمجية التالية ربط ضمني لجمع قائمة العملاء مع الطلبات الخاصة بهم.
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
التعليمات البرمجية المثال التالية يربط مجموعتين باستخدام جملة 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
هذا المثال سوف ينتج إخراج مشابه للتالي:
winlogon (968), Windows Logon
explorer (2424), Windows Explorer
cmd (5136), Command Window
التعليمات البرمجية التالية يليهل مثال يربط مجموعتين باستخدام جملة Join ذات عمودين المفتاح.
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
هذا المثال سوف ينتج إخراج مشابه للتالي:
winlogon (968), Windows Logon, Priority = 13
cmd (700), Command Window, Priority = 8
explorer (2424), Windows Explorer, Priority = 8
راجع أيضًا:
المرجع
عبارة ربط مجموعة (Visual Basic)
المبادئ
مقدمة حول LINQ في Visual Basic