Structure Person
Public Name As String
End Structure
Structure Pet
Public Name As String
Public Owner As Person
End Structure
Sub GroupJoinEx1()
Dim magnus As New Person With {.Name = "Hedlund, Magnus"}
Dim terry As New Person With {.Name = "Adams, Terry"}
Dim charlotte As New Person With {.Name = "Weiss, Charlotte"}
Dim barley As New Pet With {.Name = "Barley", .Owner = terry}
Dim boots As New Pet With {.Name = "Boots", .Owner = terry}
Dim whiskers As New Pet With {.Name = "Whiskers", .Owner = charlotte}
Dim daisy As New Pet With {.Name = "Daisy", .Owner = magnus}
Dim people As New List(Of Person)(New Person() {magnus, terry, charlotte})
Dim pets As New List(Of Pet)(New Pet() {barley, boots, whiskers, daisy})
' Create a collection where each element is an anonymous type
' that contains a Person's name and a collection of names of
' the pets that are owned by them.
Dim query =
people.GroupJoin(pets,
Function(person) person,
Function(pet) pet.Owner,
Function(person, petCollection) _
New With {.OwnerName = person.Name,
.Pets = petCollection.Select(
Function(pet) pet.Name)})
Dim output As New System.Text.StringBuilder
For Each obj In query
' Output the owner's name.
output.AppendLine(obj.OwnerName & ":")
' Output each of the owner's pet's names.
For Each pet As String In obj.Pets
output.AppendLine(" " & pet)
' Display the output.
Console.WriteLine(output.ToString)
End Sub
' This code produces the following output:
' Hedlund, Magnus
' Daisy
' Adams, Terry
' Barley
' Boots
' Weiss, Charlotte
' Whiskers
此方法是使用延後執行來實作。 立即傳回值是物件,可儲存執行動作所需的所有資訊。 除非直接在
GetEnumerator
C# 或 Visual Basic 中使用
foreach
來列舉對象,否則
For Each
不會執行這個方法所表示的查詢。
默認相等比較子
Default
,用來哈希和比較索引鍵。
GroupJoin
會產生階層式結果,這表示 中的
outer
專案會與的
inner
相符專案集合配對。
GroupJoin
可讓您根據 每個元素
outer
的一組相符項目來根據結果。
如果 的指定元素
outer
中
inner
沒有任何相互關聯的元素,該元素的相符序列將會是空的,但仍會出現在結果中。
函
resultSelector
式只會針對每個
outer
元素呼叫一次,以及符合
outer
專案之所有
inner
元素的集合。 這與
Join
方法不同,其中結果選取器函式會在包含一個專案
outer
的配對上叫用,並從中叫用一個專案
inner
。
GroupJoin
會保留的項目
outer
順序,以及的每個元素
outer
的順序,以及的
inner
相符項目順序。
GroupJoin
在傳統關聯式資料庫詞彙中沒有直接對等項目。 不過,此方法確實會實作內部聯結和左方外部聯結的超集。 這兩項作業都會以分組聯結的方式撰寫。 如需詳細資訊,請參閱
聯結作業
。
在查詢表達式語法中,
join ... into
(C#) 或
Group Join
(Visual Basic) 子句會轉譯為 的
GroupJoin
調用。
GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>,
Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>,
TResult>, IEqualityComparer<TKey>)
public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ GroupJoin(System::Collections::Generic::IEnumerable<TOuter> ^ outer, System::Collections::Generic::IEnumerable<TInner> ^ inner, Func<TOuter, TKey> ^ outerKeySelector, Func<TInner, TKey> ^ innerKeySelector, Func<TOuter, System::Collections::Generic::IEnumerable<TInner> ^, TResult> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Collections.Generic.IEnumerable<TResult> GroupJoin<TOuter,TInner,TKey,TResult> (this System.Collections.Generic.IEnumerable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, Func<TOuter,TKey> outerKeySelector, Func<TInner,TKey> innerKeySelector, Func<TOuter,System.Collections.Generic.IEnumerable<TInner>,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Collections.Generic.IEnumerable<TResult> GroupJoin<TOuter,TInner,TKey,TResult> (this System.Collections.Generic.IEnumerable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, Func<TOuter,TKey> outerKeySelector, Func<TInner,TKey> innerKeySelector, Func<TOuter,System.Collections.Generic.IEnumerable<TInner>,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member GroupJoin : seq<'Outer> * seq<'Inner> * Func<'Outer, 'Key> * Func<'Inner, 'Key> * Func<'Outer, seq<'Inner>, 'Result> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<'Result>
<Extension()>
Public Function GroupJoin(Of TOuter, TInner, TKey, TResult) (outer As IEnumerable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Func(Of TOuter, TKey), innerKeySelector As Func(Of TInner, TKey), resultSelector As Func(Of TOuter, IEnumerable(Of TInner), TResult), comparer As IEqualityComparer(Of TKey)) As IEnumerable(Of TResult)
TOuter
此方法是使用延後執行來實作。 立即傳回值是物件,可儲存執行動作所需的所有資訊。 除非直接在
GetEnumerator
C# 或 Visual Basic 中使用
foreach
來列舉對象,否則
For Each
不會執行這個方法所表示的查詢。
如果
comparer
是
null
,則默認相等比較子
Default
會用來哈希和比較索引鍵。
GroupJoin
會產生階層式結果,這表示 中的
outer
專案會與的
inner
相符專案集合配對。
GroupJoin
可讓您根據 每個元素
outer
的一組相符項目來根據結果。
如果 的指定元素
outer
中
inner
沒有任何相互關聯的元素,該元素的相符序列將會是空的,但仍會出現在結果中。
函
resultSelector
式只會針對每個
outer
元素呼叫一次,以及符合
outer
專案之所有
inner
元素的集合。 這與
Join
在包含一個 元素
outer
的配對上叫用結果選取器函式的方法不同,以及從
inner
中叫用一個專案。
GroupJoin
會保留的項目
outer
順序,以及的每個元素
outer
的順序,以及的
inner
相符項目順序。
GroupJoin
在傳統關聯式資料庫詞彙中沒有直接對等項目。 不過,此方法確實會實作內部聯結和左方外部聯結的超集。 這兩項作業都會以分組聯結的方式撰寫。 如需詳細資訊,請參閱
聯結作業
。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:
https://aka.ms/ContentUserFeedback
。
提交並檢視相關的意見反應