Enumerable.Join 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
根據相符索引鍵,將兩個序列的項目相互關聯。
多載
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
根據相符索引鍵,將兩個序列的項目相互關聯。 預設的相等比較子是用於比較索引鍵。
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
、outerKeySelector
、innerKeySelector
或 resultSelector
為 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# 或 Visual Basic 中使用 foreach
來列舉物件,否則 For Each
不會執行這個方法所表示的查詢。
預設相等比較子 Default ,用來雜湊和比較索引鍵。
聯結是指根據一般索引鍵,將兩個資訊來源的專案相互關聯的作業。 Join 會將兩個資訊來源和索引鍵搭配在一個方法呼叫中一起比對。 這與 使用 SelectMany
不同,這需要一個以上的方法呼叫來執行相同的作業。
Join 會保留 的 outer
元素順序,以及每個元素的相符專案 inner
順序。
在查詢運算式語法中, join
(C#) 或 Join
(Visual Basic) 子句會轉譯為 的 Join 調用。
在關係資料庫詞彙中 Join ,方法會實作內部等價。 'Inner' 表示只有在其他序列中具有相符專案的元素會包含在結果中。 'equijoin' 是一個聯結,其中索引鍵會比較是否相等。 左外部聯結作業沒有專用的標準查詢運算子,但可以使用 方法來執行 GroupJoin 。 如需詳細資訊,請參閱 聯結作業。
另請參閱
適用於
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
根據相符索引鍵,將兩個序列的項目相互關聯。 指定的 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>
用來雜湊及比較索引鍵的 IEqualityComparer<T>。
傳回
IEnumerable<T>,其中包含透過對兩個序列執行內部聯結所取得之型別 TResult
的項目。
例外狀況
outer
、inner
、outerKeySelector
、innerKeySelector
或 resultSelector
為 null
。
備註
此方法是使用延後執行來實作。 立即傳回值是物件,可儲存執行動作所需的所有資訊。 除非直接在 GetEnumerator
C# 或 Visual Basic 中使用 foreach
來列舉物件,否則 For Each
不會執行這個方法所表示的查詢。
如果 comparer
是 null
,則預設相等比較子 Default 會用來雜湊和比較索引鍵。
聯結是指根據一般索引鍵,將兩個資訊來源的專案相互關聯的作業。 Join 會將兩個資訊來源和索引鍵搭配在一個方法呼叫中一起比對。 這與 使用 SelectMany
不同,這需要一個以上的方法呼叫來執行相同的作業。
Join 會保留 的 outer
元素順序,以及每個元素的相符專案 inner
順序。
在關係資料庫詞彙中 Join ,方法會實作內部等價。 'Inner' 表示只有在其他序列中具有相符專案的元素會包含在結果中。 'equijoin' 是一個聯結,其中索引鍵會比較是否相等。 左外部聯結作業沒有專用的標準查詢運算子,但可以使用 方法來執行 GroupJoin 。 如需詳細資訊,請參閱 聯結作業。