Enumerable.GroupJoin 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
키 같음을 기반으로 두 시퀀스의 요소 상관 관계를 지정하고 결과를 그룹화합니다.
오버로드
| Name | Description |
|---|---|
| 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
- Source:
- GroupJoin.cs
- Source:
- GroupJoin.cs
키의 같음을 기반으로 두 시퀀스의 요소와 상관 관계를 지정하고 결과를 그룹화합니다. 기본 같음 비교자는 키를 비교하는 데 사용됩니다.
public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ GroupJoin(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);
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);
static member GroupJoin : seq<'Outer> * seq<'Inner> * Func<'Outer, 'Key> * Func<'Inner, 'Key> * Func<'Outer, seq<'Inner>, 'Result> -> seq<'Result>
<Extension()>
Public Function GroupJoin(Of TOuter, TInner, TKey, TResult) (outer As IEnumerable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Func(Of TOuter, TKey), innerKeySelector As Func(Of TInner, TKey), resultSelector As Func(Of TOuter, IEnumerable(Of TInner), TResult)) As IEnumerable(Of TResult)
형식 매개 변수
- 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<T> 두 시퀀스에서 그룹화된 조인을 수행하여 가져온 형식 TResult 의 요소를 포함하는 요소입니다.
예외
outer 또는 inner 또는 outerKeySelector 또는 innerKeySelectorresultSelector 입니다 null.
예제
다음 코드 예제에서는 두 시퀀스에서 그룹화된 조인을 수행하는 방법을 GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>) 보여 줍니다.
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
*/
Structure Person
Public Name As String
End Structure
Structure Pet
Public Name As String
Public Owner As Person
End Structure
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 collection 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.
Dim query =
people.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(obj.OwnerName & ":")
' Output each of the owner's pet's names.
For Each pet As String In obj.Pets
output.AppendLine(" " & pet)
Next
Next
' Display the output.
Console.WriteLine(output.ToString)
End Sub
' This code produces the following output:
'
' Hedlund, Magnus
' Daisy
' Adams, Terry
' Barley
' Boots
' Weiss, Charlotte
' Whiskers
설명
이 메서드는 지연된 실행을 사용하여 구현됩니다. 즉시 반환 값은 작업을 수행하는 데 필요한 모든 정보를 저장하는 개체입니다. 이 메서드가 나타내는 쿼리는 해당 GetEnumerator 메서드를 직접 호출하거나 C#의 foreach 또는 Visual Basic For Each 사용하여 개체가 열거될 때까지 실행되지 않습니다.
기본 같음 비교자는 Default키를 해시하고 비교하는 데 사용됩니다.
GroupJoin 는 계층적 결과를 생성합니다. 즉, 해당 요소의 요소가 outer 일치하는 요소 inner의 컬렉션과 쌍을 이깁니다.
GroupJoin 를 사용하면 각 요소 outer에 대한 전체 일치 집합에 대한 결과를 기반으로 할 수 있습니다.
메모
지정된 요소에 inner 대한 상관 관계가 있는 요소가 없으면 해당 요소 outer에 대한 일치 시퀀스는 비어 있지만 결과에 계속 표시됩니다.
이 resultSelector 함수는 요소와 일치하는 outer 모든 요소의 컬렉션과 함께 각 outer 요소에 inner 대해 한 번만 호출됩니다. 이 메서드는 Join 결과 선택기 함수가 하나의 요소와 하나의 요소가 inner포함된 쌍에서 outer 호출되는 메서드와 다릅니다.
GroupJoin 는 일치하는 요소의 outer순서와 각 요소의 outer순서를 inner유지합니다.
GroupJoin에는 기존 관계형 데이터베이스 용어에 직접적으로 해당하는 항목이 없습니다. 그러나 이 메서드는 내부 조인 및 왼쪽 외부 조인의 확장 집합을 구현합니다. 이러한 두 작업은 모두 그룹화된 조인의 관점에서 작성할 수 있습니다. 자세한 내용은 조인 작업을 참조하세요.
쿼리 식 구문에서 join ... into(C#) 또는 Group Join(Visual Basic) 절은 GroupJoin 호출로 변환됩니다.
추가 정보
적용 대상
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
- Source:
- GroupJoin.cs
- Source:
- GroupJoin.cs
키 같음을 기반으로 두 시퀀스의 요소 상관 관계를 지정하고 결과를 그룹화합니다. 지정된 IEqualityComparer<T> 키를 비교하는 데 사용됩니다.
public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ GroupJoin(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);
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);
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);
static member GroupJoin : seq<'Outer> * seq<'Inner> * Func<'Outer, 'Key> * Func<'Inner, 'Key> * Func<'Outer, seq<'Inner>, 'Result> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<'Result>
<Extension()>
Public Function GroupJoin(Of TOuter, TInner, TKey, TResult) (outer As IEnumerable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Func(Of TOuter, TKey), innerKeySelector As Func(Of TInner, TKey), resultSelector As Func(Of TOuter, IEnumerable(Of TInner), TResult), comparer As IEqualityComparer(Of TKey)) As IEnumerable(Of TResult)
형식 매개 변수
- 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<T> 두 시퀀스에서 그룹화된 조인을 수행하여 가져온 형식 TResult 의 요소를 포함하는 요소입니다.
예외
outer 또는 inner 또는 outerKeySelector 또는 innerKeySelectorresultSelector 입니다 null.
설명
이 메서드는 지연된 실행을 사용하여 구현됩니다. 즉시 반환 값은 작업을 수행하는 데 필요한 모든 정보를 저장하는 개체입니다. 이 메서드가 나타내는 쿼리는 해당 GetEnumerator 메서드를 직접 호출하거나 C#의 foreach 또는 Visual Basic For Each 사용하여 개체가 열거될 때까지 실행되지 않습니다.
null기본 같음 비교자Default인 경우 comparer 키를 해시하고 비교하는 데 사용됩니다.
GroupJoin 는 계층적 결과를 생성합니다. 즉, 해당 요소의 요소가 outer 일치하는 요소 inner의 컬렉션과 쌍을 이깁니다.
GroupJoin 를 사용하면 각 요소 outer에 대한 전체 일치 집합에 대한 결과를 기반으로 할 수 있습니다.
메모
지정된 요소에 inner 대한 상관 관계가 있는 요소가 없으면 해당 요소 outer에 대한 일치 시퀀스는 비어 있지만 결과에 계속 표시됩니다.
이 resultSelector 함수는 요소와 일치하는 outer 모든 요소의 컬렉션과 함께 각 outer 요소에 inner 대해 한 번만 호출됩니다. 이는 하나의 요소와 하나의 요소를 outerinner포함하는 쌍에서 결과 선택기 함수가 호출되는 메서드와 다릅니다Join.
GroupJoin 는 일치하는 요소의 outer순서와 각 요소의 outer순서를 inner유지합니다.
GroupJoin에는 기존 관계형 데이터베이스 용어에 직접적으로 해당하는 항목이 없습니다. 그러나 이 메서드는 내부 조인 및 왼쪽 외부 조인의 확장 집합을 구현합니다. 이러한 두 작업은 모두 그룹화된 조인의 관점에서 작성할 수 있습니다. 자세한 내용은 조인 작업을 참조하세요.