英語で読む

次の方法で共有


Enumerable.Join メソッド

定義

一致するキーに基づいて 2 つのシーケンスの要素を相互に関連付けます。

オーバーロード

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

一致するキーに基づいて 2 つのシーケンスの要素を相互に関連付けます。 キーの比較には既定の等値比較子が使用されます。

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

一致するキーに基づいて 2 つのシーケンスの要素を相互に関連付けます。 指定された 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

一致するキーに基づいて 2 つのシーケンスの要素を相互に関連付けます。 キーの比較には既定の等値比較子が使用されます。

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

2 番目のシーケンスの要素の型。

TKey

キー セレクター関数によって返されるキーの型。

TResult

結果の要素の型。

パラメーター

outer
IEnumerable<TOuter>

結合する最初のシーケンス。

inner
IEnumerable<TInner>

最初のシーケンスに結合するシーケンス。

outerKeySelector
Func<TOuter,TKey>

最初のシーケンスの各要素から結合キーを抽出する関数。

innerKeySelector
Func<TInner,TKey>

2 番目のシーケンスの各要素から結合キーを抽出する関数。

resultSelector
Func<TOuter,TInner,TResult>

一致する 2 つの要素から結果の要素を作成する関数。

戻り値

IEnumerable<TResult>

2 つのシーケンスに対して内部結合を実行して取得する、TResult 型の要素が格納されている IEnumerable<T>

例外

outerinnerouterKeySelectorinnerKeySelector、または resultSelectornull です。

次のコード例では、 を使用 Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>) して、共通キーに基づいて 2 つのシーケンスの内部結合を実行する方法を示します。

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# または For Each Visual Basic で を使用foreachして列挙されるまで実行されません。

キーのハッシュと比較には、 Default既定の等値比較子 ( ) が使用されます。

結合とは、共通キーに基づいて 2 つの情報ソースの要素を関連付ける操作を指します。 Join は、2 つの情報ソースと、それらが一緒に一致するキーを 1 つのメソッド呼び出しで取得します。 これは、 の 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

一致するキーに基づいて 2 つのシーケンスの要素を相互に関連付けます。 指定された 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

2 番目のシーケンスの要素の型。

TKey

キー セレクター関数によって返されるキーの型。

TResult

結果の要素の型。

パラメーター

outer
IEnumerable<TOuter>

結合する最初のシーケンス。

inner
IEnumerable<TInner>

最初のシーケンスに結合するシーケンス。

outerKeySelector
Func<TOuter,TKey>

最初のシーケンスの各要素から結合キーを抽出する関数。

innerKeySelector
Func<TInner,TKey>

2 番目のシーケンスの各要素から結合キーを抽出する関数。

resultSelector
Func<TOuter,TInner,TResult>

一致する 2 つの要素から結果の要素を作成する関数。

comparer
IEqualityComparer<TKey>

キーをハッシュして比較する IEqualityComparer<T>

戻り値

IEnumerable<TResult>

2 つのシーケンスに対して内部結合を実行して取得する、TResult 型の要素が格納されている IEnumerable<T>

例外

outerinnerouterKeySelectorinnerKeySelector、または resultSelectornull です。

注釈

このメソッドは、遅延実行を使用して実装されます。 即時戻り値は、アクションの実行に必要なすべての情報を格納する オブジェクトです。 このメソッドで表されるクエリは、オブジェクトがメソッドを直接呼び出GetEnumeratorすか、C# または For Each Visual Basic で を使用foreachして列挙されるまで実行されません。

nullの場合comparer、キーのハッシュと比較には、Default既定の等値比較子 である が使用されます。

結合とは、共通キーに基づいて 2 つの情報ソースの要素を関連付ける操作を指します。 Join は、2 つの情報ソースと、それらが一緒に一致するキーを 1 つのメソッド呼び出しで取得します。 これは、 の 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