Enumerable.GroupJoinEnumerable.GroupJoinEnumerable.GroupJoinEnumerable.GroupJoin Method

多載

 GroupJoin(IEnumerable, IEnumerable, Func, Func, Func,TResult>, IEqualityComparer) GroupJoin(IEnumerable, IEnumerable, Func, Func, Func,TResult>, IEqualityComparer) GroupJoin(IEnumerable, IEnumerable, Func, Func, Func,TResult>, IEqualityComparer) GroupJoin(IEnumerable, IEnumerable, Func, Func, Func,TResult>, IEqualityComparer) 根據索引鍵相等與否，將兩個序列的項目相互關聯，並群組產生的結果。Correlates the elements of two sequences based on key equality and groups the results. 指定的 IEqualityComparer 是用於比較索引鍵。A specified IEqualityComparer is used to compare keys. GroupJoin(IEnumerable, IEnumerable, Func, Func, Func,TResult>) GroupJoin(IEnumerable, IEnumerable, Func, Func, Func,TResult>) GroupJoin(IEnumerable, IEnumerable, Func, Func, Func,TResult>) GroupJoin(IEnumerable, IEnumerable, Func, Func, Func,TResult>) 根據索引鍵相等與否，將兩個序列的項目相互關聯，並群組產生的結果。Correlates the elements of two sequences based on equality of keys and groups the results. 預設的相等比較子是用於比較索引鍵。The default equality comparer is used to compare keys.

GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>,TResult>, IEqualityComparer<TKey>)GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>,TResult>, IEqualityComparer<TKey>)GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>,TResult>, IEqualityComparer<TKey>)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);``
``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

TInner

TKey

TResult

參數

outer
IEnumerable<TOuter>

inner
IEnumerable<TInner>

outerKeySelector
Func<TOuter,TKey>

innerKeySelector
Func<TInner,TKey>

resultSelector
Func<TOuter,IEnumerable<TInner>,TResult>

comparer
IEqualityComparer<TKey>

傳回

IEnumerable<TResult>

IEnumerable<T>，其中包含透過對兩個序列執行群組聯結所取得之型別 `TResult` 的項目。An IEnumerable<T> that contains elements of type `TResult` that are obtained by performing a grouped join on two sequences.

例外狀況

`outer``inner``outerKeySelector``innerKeySelector``resultSelector``null``outer` or `inner` or `outerKeySelector` or `innerKeySelector` or `resultSelector` is `null`.

備註

GroupJoin產生階層式結果, 這表示中`outer`的元素會與中`inner`相符專案的集合配對。GroupJoin produces hierarchical results, which means that elements from `outer` are paired with collections of matching elements from `inner`. `GroupJoin`可讓您根據每個`outer`專案的整組相符專案來建立結果的基礎。`GroupJoin` enables you to base your results on a whole set of matches for each element of `outer`.

`resultSelector`函式只會針對每個`outer`元素呼叫一次, 並針對所有`inner`符合`outer`專案的專案集合。The `resultSelector` function is called only one time for each `outer` element together with a collection of all the `inner` elements that match the `outer` element. 這不同Join于方法, 其中會在包含一個`outer`專案的配對上叫用結果選取器函式, 並在`inner`其中一個專案。This differs from the Join method in which the result selector function is invoked on pairs that contain one element from `outer` and one element from `inner`.

`GroupJoin`會保留專案的`outer`順序, 以及的每個`outer`專案, 與中`inner`相符專案的順序。`GroupJoin` preserves the order of the elements of `outer`, and for each element of `outer`, the order of the matching elements from `inner`.

GroupJoin在傳統關係資料庫詞彙中沒有直接的對等用法。GroupJoin has no direct equivalent in traditional relational database terms. 不過, 這個方法會執行內部聯結和左方外部聯結的超集合。However, this method does implement a superset of inner joins and left outer joins. 這兩種作業都可以根據群組聯結來撰寫。Both of these operations can be written in terms of a grouped join. 請參閱聯結作業See Join Operations.

GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>,TResult>)GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>,TResult>)GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>,TResult>)GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>,TResult>)

``````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);``````
``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);``
``static member GroupJoin : seq<'Outer> * seq<'Inner> * Func<'Outer, 'Key> * Func<'Inner, 'Key> * Func<'Outer, seq<'Inner>, 'Result> -> 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)) As IEnumerable(Of TResult)``````

TOuter

TInner

TKey

TResult

參數

outer
IEnumerable<TOuter>

inner
IEnumerable<TInner>

outerKeySelector
Func<TOuter,TKey>

innerKeySelector
Func<TInner,TKey>

resultSelector
Func<TOuter,IEnumerable<TInner>,TResult>

傳回

IEnumerable<TResult>

IEnumerable<T>，其中包含透過對兩個序列執行群組聯結所取得之型別 `TResult` 的項目。An IEnumerable<T> that contains elements of type `TResult` that are obtained by performing a grouped join on two sequences.

例外狀況

`outer``inner``outerKeySelector``innerKeySelector``resultSelector``null``outer` or `inner` or `outerKeySelector` or `innerKeySelector` or `resultSelector` is `null`.

範例

The following code example demonstrates how to use GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>,TResult>) to perform a grouped join on two sequences.

``````class Person
{
public string Name { get; set; }
}

class Pet
{
public string Name { get; set; }
public Person Owner { get; set; }
}

public static void GroupJoinEx1()
{
Person magnus = new Person { Name = "Hedlund, Magnus" };
Person terry = new Person { Name = "Adams, Terry" };
Person charlotte = new Person { Name = "Weiss, Charlotte" };

Pet barley = new Pet { Name = "Barley", Owner = terry };
Pet boots = new Pet { Name = "Boots", Owner = terry };
Pet whiskers = new Pet { Name = "Whiskers", Owner = charlotte };
Pet daisy = new Pet { Name = "Daisy", Owner = magnus };

List<Person> people = new List<Person> { magnus, terry, charlotte };
List<Pet> pets = new List<Pet> { barley, boots, whiskers, daisy };

// Create a list where each element is an anonymous
// type that contains a person's name and
// a collection of names of the pets they own.
var query =
people.GroupJoin(pets,
person => person,
pet => pet.Owner,
(person, petCollection) =>
new
{
OwnerName = person.Name,
Pets = petCollection.Select(pet => pet.Name)
});

foreach (var obj in query)
{
// Output the owner's name.
Console.WriteLine("{0}:", obj.OwnerName);
// Output each of the owner's pet's names.
foreach (string pet in obj.Pets)
{
Console.WriteLine("  {0}", pet);
}
}
}

/*
This code produces the following output:

Hedlund, Magnus:
Daisy
Barley
Boots
Weiss, Charlotte:
Whiskers
*/
``````
``````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)
Next
Next

' Display the output.
MsgBox(output.ToString)
End Sub

' This code produces the following output:
'
' Hedlund, Magnus
'   Daisy
'   Barley
'   Boots
' Weiss, Charlotte
'   Whiskers
``````

備註

GroupJoin產生階層式結果, 這表示中`outer`的元素會與中`inner`相符專案的集合配對。GroupJoin produces hierarchical results, which means that elements from `outer` are paired with collections of matching elements from `inner`. `GroupJoin`可讓您根據每個`outer`專案的整組相符專案來建立結果的基礎。`GroupJoin` enables you to base your results on a whole set of matches for each element of `outer`.

`resultSelector`函式只會針對每個`outer`元素呼叫一次, 並針對所有`inner`符合`outer`專案的專案集合。The `resultSelector` function is called only one time for each `outer` element together with a collection of all the `inner` elements that match the `outer` element. 這不同Join于方法, 其結果選取器函式會在包含一個`outer`專案的配對上叫用, 而另一個`inner`專案則叫用。This differs from the Join method, in which the result selector function is invoked on pairs that contain one element from `outer` and one element from `inner`.

`GroupJoin`會保留專案的`outer`順序, 以及的每個`outer`專案, 與中`inner`相符專案的順序。`GroupJoin` preserves the order of the elements of `outer`, and for each element of `outer`, the order of the matching elements from `inner`.

GroupJoin在傳統關係資料庫詞彙中沒有直接的對等用法。GroupJoin has no direct equivalent in traditional relational database terms. 不過, 這個方法會執行內部聯結和左方外部聯結的超集合。However, this method does implement a superset of inner joins and left outer joins. 這兩種作業都可以根據群組聯結來撰寫。Both of these operations can be written in terms of a grouped join. 請參閱聯結作業See Join Operations.