Enumerable.GroupJoin 메서드

정의

키가 같은지 여부에 따라 두 시퀀스의 요소를 연관시키고 결과를 그룹화합니다.

오버로드

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

키가 같은지 여부에 따라 두 시퀀스의 요소를 연관시키고 결과를 그룹화합니다. 기본 같음 비교자를 사용하여 키를 비교합니다.

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

키가 같은지 여부에 따라 두 시퀀스의 요소를 연관시키고 결과를 그룹화합니다. 지정된 IEqualityComparer<T>를 사용하여 키를 비교합니다.

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

Source:
GroupJoin.cs
Source:
GroupJoin.cs
Source:
GroupJoin.cs

키가 같은지 여부에 따라 두 시퀀스의 요소를 연관시키고 결과를 그룹화합니다. 기본 같음 비교자를 사용하여 키를 비교합니다.

C#
public static System.Collections.Generic.IEnumerable<TResult> GroupJoin<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,System.Collections.Generic.IEnumerable<TInner>,TResult> resultSelector);

형식 매개 변수

TOuter

첫 번째 시퀀스 요소의 형식입니다.

TInner

두 번째 시퀀스 요소의 형식입니다.

TKey

키 선택기 함수에서 반환하는 키의 형식입니다.

TResult

결과 요소의 형식입니다.

매개 변수

outer
IEnumerable<TOuter>

조인할 첫 번째 시퀀스입니다.

inner
IEnumerable<TInner>

첫 번째 시퀀스에 조인할 시퀀스입니다.

outerKeySelector
Func<TOuter,TKey>

첫 번째 시퀀스의 각 요소에서 조인 키를 추출하는 함수입니다.

innerKeySelector
Func<TInner,TKey>

두 번째 시퀀스의 각 요소에서 조인 키를 추출하는 함수입니다.

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

첫 번째 시퀀스의 요소와 두 번째 시퀀스의 일치하는 요소 컬렉션을 통해 결과 요소를 만들 함수입니다.

반환

IEnumerable<TResult>

두 시퀀스에 대해 그룹화 조인을 수행하여 가져온 TResult 형식 요소가 들어 있는 IEnumerable<T>입니다.

예외

outer, inner, outerKeySelector, innerKeySelector 또는 resultSelectornull인 경우

예제

다음 코드 예제에서는 를 사용하여 GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<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 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 they own.
    var query =
        people.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
*/

설명

이 메서드는 지연 된 실행을 사용 하 여 구현 됩니다. 즉시 반환 값은 작업을 수행 하는 데 필요한 모든 정보를 저장 하는 개체입니다. 이 메서드가 나타내는 쿼리는 개체를 직접 호출 GetEnumerator 하거나 C# 또는 For Each Visual Basic에서 를 사용하여 foreach 개체를 열거할 때까지 실행되지 않습니다.

기본 같음 비교자 는 Default키를 해시하고 비교하는 데 사용됩니다.

GroupJoin 는 계층적 결과를 생성합니다. 즉, 의 outer 요소는 에서 일치하는 요소 inner의 컬렉션과 쌍을 이집니다. GroupJoin 를 사용하면 의 각 요소 outer에 대한 전체 일치 집합에 대한 결과를 기반으로 할 수 있습니다.

참고

의 지정된 요소에 inner 대한 상관 관계가 있는 요소가 없는 경우 해당 요소 outer에 대한 일치 시퀀스는 비어 있지만 결과에 계속 표시됩니다.

함수는 resultSelector 요소와 일치하는 outer 모든 요소의 컬렉션과 함께 각 outer 요소에 inner 대해 한 번만 호출됩니다. 이는 의 요소 하나와 의 요소가 outer 하나 포함된 쌍에서 결과 선택기 함수가 호출되는 메서드와 inner다릅니다Join.

GroupJoin 는 의 요소 outer순서를 유지하고 의 각 요소 outer에 대해 에서 inner일치하는 요소의 순서를 유지합니다.

GroupJoin에는 기존 관계형 데이터베이스 용어에 직접적으로 해당하는 항목이 없습니다. 그러나 이 메서드는 내부 조인 및 왼쪽 우선 외부 조인의 상위 집합을 구현합니다. 이러한 작업은 모두 그룹화된 조인과 관련하여 작성할 수 있습니다. 자세한 내용은 조인 작업을 참조하세요.

쿼리 식 구문 join ... into 에서 (C#) 또는 Group Join (Visual Basic) 절은 의 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

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

Source:
GroupJoin.cs
Source:
GroupJoin.cs
Source:
GroupJoin.cs

키가 같은지 여부에 따라 두 시퀀스의 요소를 연관시키고 결과를 그룹화합니다. 지정된 IEqualityComparer<T>를 사용하여 키를 비교합니다.

C#
public static System.Collections.Generic.IEnumerable<TResult> GroupJoin<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,System.Collections.Generic.IEnumerable<TInner>,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
C#
public static System.Collections.Generic.IEnumerable<TResult> GroupJoin<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,System.Collections.Generic.IEnumerable<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,IEnumerable<TInner>,TResult>

첫 번째 시퀀스의 요소와 두 번째 시퀀스의 일치하는 요소 컬렉션을 통해 결과 요소를 만들 함수입니다.

comparer
IEqualityComparer<TKey>

키를 해시하여 비교할 IEqualityComparer<T>입니다.

반환

IEnumerable<TResult>

두 시퀀스에 대해 그룹화 조인을 수행하여 가져온 TResult 형식 요소가 들어 있는 IEnumerable<T>입니다.

예외

outer, inner, outerKeySelector, innerKeySelector 또는 resultSelectornull인 경우

설명

이 메서드는 지연 된 실행을 사용 하 여 구현 됩니다. 즉시 반환 값은 작업을 수행 하는 데 필요한 모든 정보를 저장 하는 개체입니다. 이 메서드가 나타내는 쿼리는 개체를 직접 호출 GetEnumerator 하거나 C# 또는 For Each Visual Basic에서 를 사용하여 foreach 개체를 열거할 때까지 실행되지 않습니다.

가 이nullcomparer 기본 같음 비교자 인 Default가 키를 해시하고 비교하는 데 사용됩니다.

GroupJoin 는 계층적 결과를 생성합니다. 즉, 의 outer 요소는 에서 일치하는 요소 inner의 컬렉션과 쌍을 이집니다. GroupJoin 를 사용하면 의 각 요소 outer에 대한 전체 일치 집합에 대한 결과를 기반으로 할 수 있습니다.

참고

의 지정된 요소에 inner 대한 상관 관계가 있는 요소가 없는 경우 해당 요소 outer에 대한 일치 시퀀스는 비어 있지만 결과에 계속 표시됩니다.

함수는 resultSelector 요소와 일치하는 outer 모든 요소의 컬렉션과 함께 각 outer 요소에 inner 대해 한 번만 호출됩니다. 이는 의 요소 하나와 의 요소가 outer 하나 포함된 쌍에서 결과 선택기 함수가 호출되는 메서드와 inner다릅니다Join.

GroupJoin 는 의 요소 outer순서를 유지하고 의 각 요소 outer에 대해 에서 inner일치하는 요소의 순서를 유지합니다.

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