Enumerable.Join 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
根據匹配的鍵數關聯兩個序列的元素。
多載
Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>, IEqualityComparer<TKey>)
- 來源:
- Join.cs
- 來源:
- Join.cs
- 來源:
- Join.cs
- 來源:
- Join.cs
- 來源:
- Join.cs
根據匹配的鍵數關聯兩個序列的元素。 指定的 IEqualityComparer<T> 可用來比較索引鍵。
public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ Join(System::Collections::Generic::IEnumerable<TOuter> ^ outer, System::Collections::Generic::IEnumerable<TInner> ^ inner, Func<TOuter, TKey> ^ outerKeySelector, Func<TInner, TKey> ^ innerKeySelector, Func<TOuter, TInner, TResult> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Collections.Generic.IEnumerable<TResult> Join<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,TInner,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Collections.Generic.IEnumerable<TResult> Join<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,TInner,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member Join : seq<'Outer> * seq<'Inner> * Func<'Outer, 'Key> * Func<'Inner, 'Key> * Func<'Outer, 'Inner, 'Result> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<'Result>
<Extension()>
Public Function Join(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, 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,TInner,TResult>
一個用來從兩個匹配元素建立結果元素的函式。
- comparer
- IEqualityComparer<TKey>
An IEqualityComparer<T> 用來雜湊和比較金鑰。
傳回
一個 IEnumerable<T> 具有類型為 的 TResult 元素,這些元素是透過對兩個序列進行內連接而得到的。
例外狀況
outer或、inner或outerKeySelectorinnerKeySelectorresultSelector是。null
備註
此方法透過延遲執行實現。 立即回傳值是一個物件,儲存執行動作所需的所有資訊。 此方法所代表的查詢,直到物件被枚舉,無論是直接呼叫其 GetEnumerator 方法,或是使用 C# 中的 foreach,或在 Visual Basic 中使用 For Each,才會執行。
若 comparer , null則預設的等號比較器 Default,用於雜湊與比較金鑰。
連接是指根據共同的金鑰,將兩個資訊來源的元素關聯起來的操作。
Join 帶來兩個資訊來源以及將它們匹配到一個方法呼叫中的鍵。 這與使用 SelectMany,後者需要多個方法呼叫才能執行相同操作。
Join 保持 元素 outer的順序,且對每個元素,保持 中 inner匹配元素的順序。
以關聯式資料庫的術語來說,該 Join 方法實作了一個內部等聯。 「內部」表示只有在其他序列中匹配的元素才會被納入結果。 「等聯」是指將金鑰比較以求相等的連接。 左外連接操作沒有專用的標準查詢運算子,但可透過使用該 GroupJoin 方法執行。 更多資訊請參見 「加入操作」。
另請參閱
適用於
Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>)
- 來源:
- Join.cs
- 來源:
- Join.cs
- 來源:
- Join.cs
- 來源:
- Join.cs
- 來源:
- Join.cs
根據匹配的鍵數關聯兩個序列的元素。 默認相等比較子可用來比較索引鍵。
public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ Join(System::Collections::Generic::IEnumerable<TOuter> ^ outer, System::Collections::Generic::IEnumerable<TInner> ^ inner, Func<TOuter, TKey> ^ outerKeySelector, Func<TInner, TKey> ^ innerKeySelector, Func<TOuter, TInner, TResult> ^ resultSelector);
public static System.Collections.Generic.IEnumerable<TResult> Join<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,TInner,TResult> resultSelector);
static member Join : seq<'Outer> * seq<'Inner> * Func<'Outer, 'Key> * Func<'Inner, 'Key> * Func<'Outer, 'Inner, 'Result> -> seq<'Result>
<Extension()>
Public Function Join(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, 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,TInner,TResult>
一個用來從兩個匹配元素建立結果元素的函式。
傳回
一個 IEnumerable<T> 具有類型為 的 TResult 元素,這些元素是透過對兩個序列進行內連接而得到的。
例外狀況
outer或、inner或outerKeySelectorinnerKeySelectorresultSelector是。null
範例
以下程式碼範例示範如何根據 Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>) 共同鍵數執行兩個序列的內部連接。
class Person
{
public string Name { get; set; }
}
class Pet
{
public string Name { get; set; }
public Person Owner { get; set; }
}
public static void JoinEx1()
{
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 of Person-Pet pairs where
// each element is an anonymous type that contains a
// Pet's name and the name of the Person that owns the Pet.
var query =
people.Join(pets,
person => person,
pet => pet.Owner,
(person, pet) =>
new { OwnerName = person.Name, Pet = pet.Name });
foreach (var obj in query)
{
Console.WriteLine(
"{0} - {1}",
obj.OwnerName,
obj.Pet);
}
}
/*
This code produces the following output:
Hedlund, Magnus - Daisy
Adams, Terry - Barley
Adams, Terry - 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 JoinEx1()
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 list of Person-Pet pairs, where each element is an
' anonymous type that contains a Pet's name and the name of the
' Person that owns the Pet.
Dim query =
people.Join(pets,
Function(person) person,
Function(pet) pet.Owner,
Function(person, pet) _
New With {.OwnerName = person.Name, .Pet = pet.Name})
Dim output As New System.Text.StringBuilder
For Each obj In query
output.AppendLine(obj.OwnerName & " - " & obj.Pet)
Next
' Display the output.
Console.WriteLine(output.ToString)
End Sub
' This code produces the following output:
'
' Hedlund, Magnus - Daisy
' Adams, Terry - Barley
' Adams, Terry - Boots
' Weiss, Charlotte - Whiskers
備註
此方法透過延遲執行實現。 立即回傳值是一個物件,儲存執行動作所需的所有資訊。 此方法所代表的查詢,直到物件被枚舉,無論是直接呼叫其 GetEnumerator 方法,或是使用 C# 中的 foreach,或在 Visual Basic 中使用 For Each,才會執行。
預設的等號比較器 Default,用於雜湊與比較金鑰。
連接是指根據共同的金鑰,將兩個資訊來源的元素關聯起來的操作。
Join 帶來兩個資訊來源以及將它們匹配到一個方法呼叫中的鍵。 這與使用 SelectMany,後者需要多個方法呼叫才能執行相同操作。
Join 保持 元素 outer的順序,且對每個元素,保持 中 inner匹配元素的順序。
在查詢表達式語法中,join (C#) 或 Join (Visual Basic) 子句可轉譯為 Join 的呼叫。
以關聯式資料庫的術語來說,該 Join 方法實作了一個內部等聯。 「內部」表示只有在其他序列中匹配的元素才會被納入結果。 「等聯」是指將金鑰比較以求相等的連接。 左外連接操作沒有專用的標準查詢運算子,但可透過使用該 GroupJoin 方法執行。 更多資訊請參見 「加入操作」。
另請參閱
適用於
Join<TOuter,TInner,TKey>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, IEqualityComparer<TKey>)
- 來源:
- Join.cs
public static System.Collections.Generic.IEnumerable<(TOuter Outer, TInner Inner)> Join<TOuter,TInner,TKey>(this System.Collections.Generic.IEnumerable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, Func<TOuter,TKey> outerKeySelector, Func<TInner,TKey> innerKeySelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer = default);
static member Join : seq<'Outer> * seq<'Inner> * Func<'Outer, 'Key> * Func<'Inner, 'Key> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<ValueTuple<'Outer, 'Inner>>
<Extension()>
Public Function Join(Of TOuter, TInner, TKey) (outer As IEnumerable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Func(Of TOuter, TKey), innerKeySelector As Func(Of TInner, TKey), Optional comparer As IEqualityComparer(Of TKey) = Nothing) As IEnumerable(Of ValueTuple(Of TOuter, TInner))
類型參數
- TOuter
- TInner
- TKey
參數
- outer
- IEnumerable<TOuter>
- inner
- IEnumerable<TInner>
- outerKeySelector
- Func<TOuter,TKey>
- innerKeySelector
- Func<TInner,TKey>
- comparer
- IEqualityComparer<TKey>