英語で読む

次の方法で共有


Queryable.GroupJoin メソッド

定義

キーが等しいかどうかに基づいて 2 つのシーケンスの要素を相互に関連付け、その結果をグループ化します。

オーバーロード

GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>)

キーが等しいかどうかに基づいて 2 つのシーケンスの要素を相互に関連付け、その結果をグループ化します。 キーの比較には既定の等値比較子が使用されます。

GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>, IEqualityComparer<TKey>)

キーが等しいかどうかに基づいて 2 つのシーケンスの要素を相互に関連付け、その結果をグループ化します。 指定された IEqualityComparer<T> を使用してキーを比較します。

GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>)

ソース:
Queryable.cs
ソース:
Queryable.cs
ソース:
Queryable.cs

キーが等しいかどうかに基づいて 2 つのシーケンスの要素を相互に関連付け、その結果をグループ化します。 キーの比較には既定の等値比較子が使用されます。

C#
public static System.Linq.IQueryable<TResult> GroupJoin<TOuter,TInner,TKey,TResult> (this System.Linq.IQueryable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, System.Linq.Expressions.Expression<Func<TOuter,TKey>> outerKeySelector, System.Linq.Expressions.Expression<Func<TInner,TKey>> innerKeySelector, System.Linq.Expressions.Expression<Func<TOuter,System.Collections.Generic.IEnumerable<TInner>,TResult>> resultSelector);

型パラメーター

TOuter

最初のシーケンスの要素の型。

TInner

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

TKey

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

TResult

結果の要素の型。

パラメーター

outer
IQueryable<TOuter>

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

inner
IEnumerable<TInner>

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

outerKeySelector
Expression<Func<TOuter,TKey>>

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

innerKeySelector
Expression<Func<TInner,TKey>>

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

resultSelector
Expression<Func<TOuter,IEnumerable<TInner>,TResult>>

最初のシーケンスの要素と、2 番目のシーケンスの一致する要素のコレクションから結果の要素を作成する関数。

戻り値

IQueryable<TResult>

2 つのシーケンスに対してグループ化結合を実行して取得した TResult 型の要素が格納されている IQueryable<T>

例外

outerinnerouterKeySelectorinnerKeySelector、または resultSelectornull です。

次のコード例では、 を使用 GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<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 GroupJoinEx1()
{
    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 where each element is an anonymous
    // type that contains a person's name and a collection
    // of names of the pets that are owned by them.
    var query =
        people.AsQueryable().GroupJoin(pets,
                         person => person,
                         pet => pet.Owner,
                         (person, petCollection) =>
                             new
                             {
                                 OwnerName = person.Name,
                                 Pets = petCollection.Select(pet => pet.Name)
                             });

    foreach (var obj in query)
    {
        // Output the owner's name.
        Console.WriteLine("{0}:", obj.OwnerName);
        // Output each of the owner's pet's names.
        foreach (string pet in obj.Pets)
            Console.WriteLine("  {0}", pet);
    }
}

/*
    This code produces the following output:

    Hedlund, Magnus:
      Daisy
    Adams, Terry:
      Barley
      Boots
    Weiss, Charlotte:
      Whiskers
*/

注釈

このメソッドには、型引数が型 Expression<TDelegate> の 1 つである型のパラメーターが少なくとも 1 つ Func<T,TResult> 含まれています。 これらのパラメーターでは、ラムダ式を渡すことができます。これは に Expression<TDelegate>コンパイルされます。

メソッドは GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>)MethodCallExpression 構築されたジェネリック メソッドとして自身を呼び出すことを GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) 表す を生成します。 次に、 パラメーターの MethodCallExpressionCreateQuery<TElement>(Expression) プロパティで表される の IQueryProvider メソッドに をProviderouter渡します。

呼び出し GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) を表す式ツリーを実行した結果として発生するクエリ動作は、 パラメーターの型の outer 実装によって異なります。 予期される動作は、 outerKeySelector 関数と innerKeySelector 関数がそれぞれ と innerからouterキーを抽出するために使用されるということです。 これらのキーは、 内の各要素と から 0 個以上の outer 要素 innerと一致するように等しいかどうかを比較します。 次に、 resultSelector 関数が呼び出され、相関要素の各グループから結果オブジェクトが投影されます。

適用対象

.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 2.0, 2.1
UWP 10.0

GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>, IEqualityComparer<TKey>)

ソース:
Queryable.cs
ソース:
Queryable.cs
ソース:
Queryable.cs

キーが等しいかどうかに基づいて 2 つのシーケンスの要素を相互に関連付け、その結果をグループ化します。 指定された IEqualityComparer<T> を使用してキーを比較します。

C#
public static System.Linq.IQueryable<TResult> GroupJoin<TOuter,TInner,TKey,TResult> (this System.Linq.IQueryable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, System.Linq.Expressions.Expression<Func<TOuter,TKey>> outerKeySelector, System.Linq.Expressions.Expression<Func<TInner,TKey>> innerKeySelector, System.Linq.Expressions.Expression<Func<TOuter,System.Collections.Generic.IEnumerable<TInner>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
C#
public static System.Linq.IQueryable<TResult> GroupJoin<TOuter,TInner,TKey,TResult> (this System.Linq.IQueryable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, System.Linq.Expressions.Expression<Func<TOuter,TKey>> outerKeySelector, System.Linq.Expressions.Expression<Func<TInner,TKey>> innerKeySelector, System.Linq.Expressions.Expression<Func<TOuter,System.Collections.Generic.IEnumerable<TInner>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);

型パラメーター

TOuter

最初のシーケンスの要素の型。

TInner

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

TKey

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

TResult

結果の要素の型。

パラメーター

outer
IQueryable<TOuter>

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

inner
IEnumerable<TInner>

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

outerKeySelector
Expression<Func<TOuter,TKey>>

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

innerKeySelector
Expression<Func<TInner,TKey>>

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

resultSelector
Expression<Func<TOuter,IEnumerable<TInner>,TResult>>

最初のシーケンスの要素と、2 番目のシーケンスの一致する要素のコレクションから結果の要素を作成する関数。

comparer
IEqualityComparer<TKey>

キーをハッシュして比較する比較子。

戻り値

IQueryable<TResult>

2 つのシーケンスに対してグループ化結合を実行して取得した TResult 型の要素が格納されている IQueryable<T>

例外

outerinnerouterKeySelectorinnerKeySelector、または resultSelectornull です。

注釈

このメソッドには、型引数が型 Expression<TDelegate> の 1 つである型のパラメーターが少なくとも 1 つ Func<T,TResult> 含まれています。 これらのパラメーターでは、ラムダ式を渡すことができます。これは に Expression<TDelegate>コンパイルされます。

メソッドは GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>, IEqualityComparer<TKey>)MethodCallExpression 構築されたジェネリック メソッドとして自身を呼び出すことを GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>, IEqualityComparer<TKey>) 表す を生成します。 次に、 パラメーターの MethodCallExpressionCreateQuery<TElement>(Expression) プロパティで表される の IQueryProvider メソッドに をProviderouter渡します。

呼び出し GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>, IEqualityComparer<TKey>) を表す式ツリーを実行した結果として発生するクエリ動作は、 パラメーターの型の outer 実装によって異なります。 予期される動作は、 outerKeySelector 関数と innerKeySelector 関数がそれぞれ と innerからouterキーを抽出するために使用されるということです。 これらのキーは、 を使用 comparerして等しいかどうかを比較します。 比較の結果は、 の各要素と から inner0 個以上のouter要素を照合するために使用されます。 次に、 resultSelector 関数が呼び出され、相関要素の各グループから結果オブジェクトが投影されます。

適用対象

.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 2.0, 2.1
UWP 10.0