Enumerable.GroupJoin Metoda

Definicja

Koreluje elementy dwóch sekwencji na podstawie równości klucza i grupuje wyniki.

Przeciążenia

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

Koreluje elementy dwóch sekwencji na podstawie równości kluczy i grupuje wyniki. Domyślny moduł porównywania równości służy do porównywania kluczy.

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

Koreluje elementy dwóch sekwencji na podstawie równości klucza i grupuje wyniki. Określony IEqualityComparer<T> służy do porównywania kluczy.

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

Źródło:
GroupJoin.cs
Źródło:
GroupJoin.cs
Źródło:
GroupJoin.cs
Źródło:
GroupJoin.cs
Źródło:
GroupJoin.cs

Koreluje elementy dwóch sekwencji na podstawie równości kluczy i grupuje wyniki. Domyślny moduł porównywania równości służy do porównywania kluczy.

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)

Parametry typu

TOuter

Typ elementów pierwszej sekwencji.

TInner

Typ elementów drugiej sekwencji.

TKey

Typ kluczy zwracanych przez funkcje selektora kluczy.

TResult

Typ elementów wyniku.

Parametry

outer
IEnumerable<TOuter>

Pierwsza sekwencja do sprzężenia.

inner
IEnumerable<TInner>

Sekwencja dołączenia do pierwszej sekwencji.

outerKeySelector
Func<TOuter,TKey>

Funkcja wyodrębniania klucza sprzężenia z każdego elementu pierwszej sekwencji.

innerKeySelector
Func<TInner,TKey>

Funkcja wyodrębniania klucza sprzężenia z każdego elementu drugiej sekwencji.

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

Funkcja umożliwiająca utworzenie elementu wyniku na podstawie elementu z pierwszej sekwencji i kolekcji pasujących elementów z drugiej sekwencji.

Zwraca

IEnumerable<TResult>

Element IEnumerable<T> zawierający elementy typu TResult , które są uzyskiwane przez wykonanie sprzężenia zgrupowanego w dwóch sekwencjach.

Wyjątki

outer lub innerouterKeySelector lub innerKeySelectorresultSelector lub ma wartość null.

Przykłady

W poniższym przykładzie kodu pokazano, jak wykonać GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>) sprzężenie zgrupowane w dwóch sekwencjach.

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

Uwagi

Ta metoda jest implementowana przy użyciu odroczonego wykonania. Natychmiastowa wartość zwracana to obiekt, który przechowuje wszystkie informacje wymagane do wykonania akcji. Zapytanie reprezentowane przez tę metodę nie jest wykonywane, dopóki obiekt nie zostanie wyliczony przez wywołanie metody GetEnumerator bezpośrednio lub przy użyciu foreach w języku C# lub For Each w Visual Basic.

Domyślny moduł porównywania równości , Defaultsłuży do tworzenia skrótów i porównywania kluczy.

GroupJoin tworzy wyniki hierarchiczne, co oznacza, że elementy z outer elementu są sparowane z kolekcjami pasujących elementów z inner. GroupJoinUmożliwia oparcie wyników na całym zestawie dopasowań dla każdego elementu .outer

Uwaga / Notatka

Jeśli dla danego elementu nie ma skorelowanych elementów inner , sekwencja dopasowań dla tego elementu outerbędzie pusta, ale nadal będzie wyświetlana w wynikach.

Funkcja resultSelector jest wywoływana tylko raz dla każdego outer elementu wraz z kolekcją wszystkich inner elementów pasujących do outer elementu. Różni się to od Join metody , w której funkcja selektora wyników jest wywoływana w parach zawierających jeden element z outer i jeden element z inner.

GroupJoin Zachowuje kolejność elementów outer, i dla każdego elementu outerklasy , kolejność pasujących elementów z innerklasy .

GroupJoin nie ma bezpośredniego odpowiednika w tradycyjnych terminach relacyjnej bazy danych. Jednak ta metoda implementuje nadzbiór sprzężeń wewnętrznych i lewe sprzężenia zewnętrzne. Obie te operacje można przedstawić jako złączenie grupowane. Aby uzyskać więcej informacji, zobacz Operacje dołączania.

W składni wyrażenia zapytania klauzula join ... into (C#) lub Group Join (Visual Basic) przekłada się na wywołanie GroupJoin.

Zobacz też

Dotyczy

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

Źródło:
GroupJoin.cs
Źródło:
GroupJoin.cs
Źródło:
GroupJoin.cs
Źródło:
GroupJoin.cs
Źródło:
GroupJoin.cs

Koreluje elementy dwóch sekwencji na podstawie równości klucza i grupuje wyniki. Określony IEqualityComparer<T> służy do porównywania kluczy.

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)

Parametry typu

TOuter

Typ elementów pierwszej sekwencji.

TInner

Typ elementów drugiej sekwencji.

TKey

Typ kluczy zwracanych przez funkcje selektora kluczy.

TResult

Typ elementów wyniku.

Parametry

outer
IEnumerable<TOuter>

Pierwsza sekwencja do sprzężenia.

inner
IEnumerable<TInner>

Sekwencja dołączenia do pierwszej sekwencji.

outerKeySelector
Func<TOuter,TKey>

Funkcja wyodrębniania klucza sprzężenia z każdego elementu pierwszej sekwencji.

innerKeySelector
Func<TInner,TKey>

Funkcja wyodrębniania klucza sprzężenia z każdego elementu drugiej sekwencji.

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

Funkcja umożliwiająca utworzenie elementu wyniku na podstawie elementu z pierwszej sekwencji i kolekcji pasujących elementów z drugiej sekwencji.

comparer
IEqualityComparer<TKey>

IEqualityComparer<T> skrótu i porównania kluczy.

Zwraca

IEnumerable<TResult>

Element IEnumerable<T> zawierający elementy typu TResult , które są uzyskiwane przez wykonanie sprzężenia zgrupowanego w dwóch sekwencjach.

Wyjątki

outer lub innerouterKeySelector lub innerKeySelectorresultSelector lub ma wartość null.

Uwagi

Ta metoda jest implementowana przy użyciu odroczonego wykonania. Natychmiastowa wartość zwracana to obiekt, który przechowuje wszystkie informacje wymagane do wykonania akcji. Zapytanie reprezentowane przez tę metodę nie jest wykonywane, dopóki obiekt nie zostanie wyliczony przez wywołanie metody GetEnumerator bezpośrednio lub przy użyciu foreach w języku C# lub For Each w Visual Basic.

Jeśli comparer parametr to null, domyślnym modułem porównywania równości, Defaultjest używany do tworzenia skrótów i porównywania kluczy.

GroupJoin tworzy wyniki hierarchiczne, co oznacza, że elementy z outer elementu są sparowane z kolekcjami pasujących elementów z inner. GroupJoinUmożliwia oparcie wyników na całym zestawie dopasowań dla każdego elementu .outer

Uwaga / Notatka

Jeśli dla danego elementu nie ma skorelowanych elementów inner , sekwencja dopasowań dla tego elementu outerbędzie pusta, ale nadal będzie wyświetlana w wynikach.

Funkcja resultSelector jest wywoływana tylko raz dla każdego outer elementu wraz z kolekcją wszystkich inner elementów pasujących do outer elementu. Różni się to od Join metody, w której funkcja selektora wyników jest wywoływana w parach zawierających jeden element z outer i jeden element z inner.

GroupJoin Zachowuje kolejność elementów outer, i dla każdego elementu outerklasy , kolejność pasujących elementów z innerklasy .

GroupJoin nie ma bezpośredniego odpowiednika w tradycyjnych terminach relacyjnej bazy danych. Jednak ta metoda implementuje nadzbiór sprzężeń wewnętrznych i lewe sprzężenia zewnętrzne. Obie te operacje można przedstawić jako złączenie grupowane. Aby uzyskać więcej informacji, zobacz Operacje dołączania.

Zobacz też

Dotyczy