Queryable.GroupJoin 메서드

정의

키가 같은지 여부에 따라 두 시퀀스의 요소를 연관시키고 결과를 그룹화합니다.Correlates the elements of two sequences based on key equality and groups the results.

오버로드

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

키가 같은지 여부에 따라 두 시퀀스의 요소를 연관시키고 결과를 그룹화합니다.Correlates the elements of two sequences based on key equality and groups the results. 기본 같음 비교자를 사용하여 키를 비교합니다.The default equality comparer is used to compare keys.

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

키가 같은지 여부에 따라 두 시퀀스의 요소를 연관시키고 결과를 그룹화합니다.Correlates the elements of two sequences based on key equality and groups the results. 지정된 IEqualityComparer<T>를 사용하여 키를 비교합니다.A specified IEqualityComparer<T> is used to compare keys.

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

키가 같은지 여부에 따라 두 시퀀스의 요소를 연관시키고 결과를 그룹화합니다.Correlates the elements of two sequences based on key equality and groups the results. 기본 같음 비교자를 사용하여 키를 비교합니다.The default equality comparer is used to compare keys.

public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IQueryable<TResult> ^ GroupJoin(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);
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);
static member GroupJoin : System.Linq.IQueryable<'Outer> * seq<'Inner> * System.Linq.Expressions.Expression<Func<'Outer, 'Key>> * System.Linq.Expressions.Expression<Func<'Inner, 'Key>> * System.Linq.Expressions.Expression<Func<'Outer, seq<'Inner>, 'Result>> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function GroupJoin(Of TOuter, TInner, TKey, TResult) (outer As IQueryable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Expression(Of Func(Of TOuter, TKey)), innerKeySelector As Expression(Of Func(Of TInner, TKey)), resultSelector As Expression(Of Func(Of TOuter, IEnumerable(Of TInner), TResult))) As IQueryable(Of TResult)

형식 매개 변수

TOuter

첫 번째 시퀀스 요소의 형식입니다.The type of the elements of the first sequence.

TInner

두 번째 시퀀스 요소의 형식입니다.The type of the elements of the second sequence.

TKey

키 선택기 함수에서 반환하는 키의 형식입니다.The type of the keys returned by the key selector functions.

TResult

결과 요소의 형식입니다.The type of the result elements.

매개 변수

outer
IQueryable<TOuter>

조인할 첫 번째 시퀀스입니다.The first sequence to join.

inner
IEnumerable<TInner>

첫 번째 시퀀스에 조인할 시퀀스입니다.The sequence to join to the first sequence.

outerKeySelector
Expression<Func<TOuter,TKey>>

첫 번째 시퀀스의 각 요소에서 조인 키를 추출하는 함수입니다.A function to extract the join key from each element of the first sequence.

innerKeySelector
Expression<Func<TInner,TKey>>

두 번째 시퀀스의 각 요소에서 조인 키를 추출하는 함수입니다.A function to extract the join key from each element of the second sequence.

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

첫 번째 시퀀스의 요소와 두 번째 시퀀스의 일치하는 요소 컬렉션을 통해 결과 요소를 만들 함수입니다.A function to create a result element from an element from the first sequence and a collection of matching elements from the second sequence.

반환

IQueryable<TResult>

두 시퀀스에 대해 그룹화 조인을 수행하여 가져온 TResult 형식 요소가 들어 있는 IQueryable<T>입니다.An IQueryable<T> that contains elements of type TResult obtained by performing a grouped join on two sequences.

예외

outer, inner, outerKeySelector, innerKeySelector 또는 resultSelectornull인 경우outer or inner or outerKeySelector or innerKeySelector or resultSelector is null.

예제

다음 코드 예제에서는를 사용 하 여 GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) 두 시퀀스에 대해 그룹화 조인을 수행 하는 방법을 보여 줍니다.The following code example demonstrates how to use GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) to perform a grouped join on two sequences.

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

Structure Person
    Public Name As String
End Structure

Structure Pet
    Public Name As String
    Public Owner As Person
End Structure

Shared Sub GroupJoinEx1()
    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 where each element is an anonymous 
    ' type that contains a person's name and a collection
    ' of the names of the pets that are owned by them.
    Dim query = _
        people.AsQueryable().GroupJoin(pets, _
                   Function(person) person, _
                   Function(pet) pet.Owner, _
                   Function(person, petCollection) _
                       New With {.OwnerName = person.Name, _
                                 .Pets = petCollection.Select( _
                                                    Function(pet) pet.Name)})

    Dim output As New System.Text.StringBuilder
    For Each obj In query
        ' Output the owner's name.
        output.AppendLine(String.Format("{0}:", obj.OwnerName))
        ' Output each of the owner's pet's names.
        For Each pet As String In obj.Pets
            output.AppendLine(String.Format("  {0}", pet))
        Next
    Next

    ' Display the output.
    MsgBox(output.ToString())
End Sub

' This code produces the following output:

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

설명

이 메서드에 형식 인수가 형식 중 하나인 형식의 매개 변수가 하나 이상 있습니다 Expression<TDelegate> Func<T,TResult> .This method has at least one parameter of type Expression<TDelegate> whose type argument is one of the Func<T,TResult> types. 이러한 매개 변수는 람다 식을 전달할 수 있으며로 컴파일됩니다 Expression<TDelegate> .For these parameters, you can pass in a lambda expression and it will be compiled to an 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>>) .The GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) method generates a MethodCallExpression that represents calling GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) itself as a constructed generic method. 그런 다음 MethodCallExpression CreateQuery<TElement>(Expression) IQueryProvider Provider 매개 변수의 속성이 나타내는의 메서드에를 전달 합니다 outer .It then passes the MethodCallExpression to the CreateQuery<TElement>(Expression) method of the IQueryProvider represented by the Provider property of the outer parameter.

호출을 나타내는 식 트리를 실행 한 결과로 발생 하는 쿼리 동작은 GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) 매개 변수의 형식 구현에 따라 달라 집니다 outer .The query behavior that occurs as a result of executing an expression tree that represents calling GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) depends on the implementation of the type of the outer parameter. 예상 되는 동작은 outerKeySelector 및 함수를 innerKeySelector 사용 하 여 각각 및에서 키를 추출 하는 것입니다 outer inner .The expected behavior is that the outerKeySelector and innerKeySelector functions are used to extract keys from outer and inner, respectively. 이러한 키는의 각 요소와의 요소가 0 개 이상인 경우와 일치 하는지 비교 outer inner 합니다.These keys are compared for equality to match each element in outer with zero or more elements from inner. 그런 다음 resultSelector 함수를 호출 하 여 각 상관 관계 요소의 그룹에서 결과 개체를 프로젝션 합니다.Then the resultSelector function is invoked to project a result object from each group of correlated elements.

적용 대상

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

키가 같은지 여부에 따라 두 시퀀스의 요소를 연관시키고 결과를 그룹화합니다.Correlates the elements of two sequences based on key equality and groups the results. 지정된 IEqualityComparer<T>를 사용하여 키를 비교합니다.A specified IEqualityComparer<T> is used to compare keys.

public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IQueryable<TResult> ^ GroupJoin(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);
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);
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);
static member GroupJoin : System.Linq.IQueryable<'Outer> * seq<'Inner> * System.Linq.Expressions.Expression<Func<'Outer, 'Key>> * System.Linq.Expressions.Expression<Func<'Inner, 'Key>> * System.Linq.Expressions.Expression<Func<'Outer, seq<'Inner>, 'Result>> * System.Collections.Generic.IEqualityComparer<'Key> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function GroupJoin(Of TOuter, TInner, TKey, TResult) (outer As IQueryable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Expression(Of Func(Of TOuter, TKey)), innerKeySelector As Expression(Of Func(Of TInner, TKey)), resultSelector As Expression(Of Func(Of TOuter, IEnumerable(Of TInner), TResult)), comparer As IEqualityComparer(Of TKey)) As IQueryable(Of TResult)

형식 매개 변수

TOuter

첫 번째 시퀀스 요소의 형식입니다.The type of the elements of the first sequence.

TInner

두 번째 시퀀스 요소의 형식입니다.The type of the elements of the second sequence.

TKey

키 선택기 함수에서 반환하는 키의 형식입니다.The type of the keys returned by the key selector functions.

TResult

결과 요소의 형식입니다.The type of the result elements.

매개 변수

outer
IQueryable<TOuter>

조인할 첫 번째 시퀀스입니다.The first sequence to join.

inner
IEnumerable<TInner>

첫 번째 시퀀스에 조인할 시퀀스입니다.The sequence to join to the first sequence.

outerKeySelector
Expression<Func<TOuter,TKey>>

첫 번째 시퀀스의 각 요소에서 조인 키를 추출하는 함수입니다.A function to extract the join key from each element of the first sequence.

innerKeySelector
Expression<Func<TInner,TKey>>

두 번째 시퀀스의 각 요소에서 조인 키를 추출하는 함수입니다.A function to extract the join key from each element of the second sequence.

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

첫 번째 시퀀스의 요소와 두 번째 시퀀스의 일치하는 요소 컬렉션을 통해 결과 요소를 만들 함수입니다.A function to create a result element from an element from the first sequence and a collection of matching elements from the second sequence.

comparer
IEqualityComparer<TKey>

키를 해시하여 비교할 비교자입니다.A comparer to hash and compare keys.

반환

IQueryable<TResult>

두 시퀀스에 대해 그룹화 조인을 수행하여 가져온 TResult 형식 요소가 들어 있는 IQueryable<T>입니다.An IQueryable<T> that contains elements of type TResult obtained by performing a grouped join on two sequences.

예외

outer, inner, outerKeySelector, innerKeySelector 또는 resultSelectornull인 경우outer or inner or outerKeySelector or innerKeySelector or resultSelector is null.

설명

이 메서드에 형식 인수가 형식 중 하나인 형식의 매개 변수가 하나 이상 있습니다 Expression<TDelegate> Func<T,TResult> .This method has at least one parameter of type Expression<TDelegate> whose type argument is one of the Func<T,TResult> types. 이러한 매개 변수는 람다 식을 전달할 수 있으며로 컴파일됩니다 Expression<TDelegate> .For these parameters, you can pass in a lambda expression and it will be compiled to an 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>) .The 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>) method generates a MethodCallExpression that represents calling 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>) itself as a constructed generic method. 그런 다음 MethodCallExpression CreateQuery<TElement>(Expression) IQueryProvider Provider 매개 변수의 속성이 나타내는의 메서드에를 전달 합니다 outer .It then passes the MethodCallExpression to the CreateQuery<TElement>(Expression) method of the IQueryProvider represented by the Provider property of the outer parameter.

호출을 나타내는 식 트리를 실행 한 결과로 발생 하는 쿼리 동작은 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 .The query behavior that occurs as a result of executing an expression tree that represents calling 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>) depends on the implementation of the type of the outer parameter. 예상 되는 동작은 outerKeySelector 및 함수를 innerKeySelector 사용 하 여 각각 및에서 키를 추출 하는 것입니다 outer inner .The expected behavior is that the outerKeySelector and innerKeySelector functions are used to extract keys from outer and inner, respectively. 이러한 키는를 사용 하 여 같은지 비교 comparer 합니다.These keys are compared for equality by using comparer. 비교 결과는의 각 요소를에서 0 개 이상의 요소로 일치 시키는 데 사용 됩니다 outer inner .The outcome of the comparisons is used to match each element in outer with zero or more elements from inner. 그런 다음 resultSelector 함수를 호출 하 여 각 상관 관계 요소의 그룹에서 결과 개체를 프로젝션 합니다.Then the resultSelector function is invoked to project a result object from each group of correlated elements.

적용 대상