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

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

C#
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);

類型參數

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>) ,根據通用索引鍵執行兩個序列的內部聯結。

C#
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
*/

備註

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

預設相等比較子 Default ,用來雜湊和比較索引鍵。

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

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

在查詢運算式語法中, join (C#) 或 Join (Visual Basic) 子句會轉譯為 的 Join 調用。

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

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

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> 是用於比較索引鍵。

C#
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);
C#
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);

類型參數

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 。 如需詳細資訊,請參閱 聯結作業

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0