Enumerable.Join 方法

定義

根據相符索引鍵,將兩個序列的項目相互關聯。

多載

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

根據相符索引鍵,將兩個序列的項目相互關聯。 預設的相等比較子是用於比較索引鍵。

Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>, IEqualityComparer<TKey>)

根據相符索引鍵,將兩個序列的項目相互關聯。 指定的 IEqualityComparer<T> 是用於比較索引鍵。

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<TResult>

IEnumerable<T>,其中包含透過對兩個序列執行內部聯結所取得之型別 TResult 的項目。

例外狀況

outerinnerouterKeySelectorinnerKeySelectorresultSelectornull

範例

下列程式碼範例示範如何使用 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<TResult>

IEnumerable<T>,其中包含透過對兩個序列執行內部聯結所取得之型別 TResult 的項目。

例外狀況

outerinnerouterKeySelectorinnerKeySelectorresultSelectornull

備註

此方法是使用延後執行來實作。 立即傳回值是物件,可儲存執行動作所需的所有資訊。 除非直接在 GetEnumerator C# 或 Visual Basic 中使用 foreach 來列舉物件,否則 For Each 不會執行這個方法所表示的查詢。

如果 comparernull ,則預設相等比較子 Default 會用來雜湊和比較索引鍵。

聯結是指根據一般索引鍵,將兩個資訊來源的專案相互關聯的作業。 Join 會將兩個資訊來源和索引鍵搭配在一個方法呼叫中一起比對。 這與 使用 SelectMany 不同,這需要一個以上的方法呼叫來執行相同的作業。

Join 會保留 的 outer 元素順序,以及每個元素的相符專案 inner 順序。

在關係資料庫詞彙中 Join ,方法會實作內部等價。 'Inner' 表示只有在其他序列中具有相符專案的元素會包含在結果中。 'equijoin' 是一個聯結,其中索引鍵會比較是否相等。 左外部聯結作業沒有專用的標準查詢運算子,但可以使用 方法來執行 GroupJoin 。 如需詳細資訊,請參閱 聯結作業

另請參閱

適用於