Enumerable.GroupJoin Metoda

Definicja

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

Przeciążenia

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> jest używany 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

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.

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

Parametry typu

TOuter

Typ elementów pierwszej sekwencji.

TInner

Typ elementów drugiej sekwencji.

TKey

Typ kluczy zwracanych przez funkcje przełącznika kluczowego.

TResult

Typ elementów wyniku.

Parametry

outer
IEnumerable<TOuter>

Pierwsza sekwencja do przyłączenia.

inner
IEnumerable<TInner>

Sekwencja do przyłączenia do pierwszej sekwencji.

outerKeySelector
Func<TOuter,TKey>

Funkcja wyodrębniania klucza łączenia z każdego elementu pierwszej sekwencji.

innerKeySelector
Func<TInner,TKey>

Funkcja wyodrębniania klucza łączenia z każdego elementu drugiej sekwencji.

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

Funkcja umożliwiająca utworzenie elementu wyniku z 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 innerKeySelector lub resultSelector jest 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.

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

Uwagi

Ta metoda jest implementowana za pomocą odroczonego wykonania. Bezpośrednio zwracana wartość jest obiektem, który przechowuje wszystkie informacje wymagane do wykonania akcji. Zapytanie reprezentowane przez tę metodę nie jest wykonywane, dopóki obiekt nie zostanie wyliczony, wywołując metodę GetEnumerator bezpośrednio lub używając w foreach 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 generuje wyniki hierarchiczne, co oznacza, że elementy z outer elementu są sparowane z kolekcjami pasujących elementów z innerklasy . GroupJoin umożliwia oparcie wyników na całym zestawie dopasowań dla każdego elementu elementu outer.

Uwaga

Jeśli dla danego elementu outernie ma skorelowanych elementów inner , sekwencja dopasowań dla tego elementu bę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 outer, kolejność pasujących elementów z inner.

GroupJoin nie ma bezpośredniego odpowiednika w tradycyjnych terminach relacyjnej bazy danych. Jednak ta metoda implementuje nadzbior sprzężeń wewnętrznych i lewe sprzężenia zewnętrzne. Oba te operacje można napisać pod względem sprzężenia grupowanego. Aby uzyskać więcej informacji, zobacz Operacje dołączania.

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

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.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>)

Ź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> jest używany do porównywania kluczy.

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

Parametry typu

TOuter

Typ elementów pierwszej sekwencji.

TInner

Typ elementów drugiej sekwencji.

TKey

Typ kluczy zwracanych przez funkcje przełącznika kluczowego.

TResult

Typ elementów wyniku.

Parametry

outer
IEnumerable<TOuter>

Pierwsza sekwencja do przyłączenia.

inner
IEnumerable<TInner>

Sekwencja do przyłączenia do pierwszej sekwencji.

outerKeySelector
Func<TOuter,TKey>

Funkcja wyodrębniania klucza łączenia z każdego elementu pierwszej sekwencji.

innerKeySelector
Func<TInner,TKey>

Funkcja wyodrębniania klucza łączenia z każdego elementu drugiej sekwencji.

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

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

comparer
IEqualityComparer<TKey>

Skrót IEqualityComparer<T> i porównanie 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 innerKeySelector lub resultSelector jest null.

Uwagi

Ta metoda jest implementowana za pomocą odroczonego wykonania. Bezpośrednio zwracana wartość jest obiektem, który przechowuje wszystkie informacje wymagane do wykonania akcji. Zapytanie reprezentowane przez tę metodę nie jest wykonywane, dopóki obiekt nie zostanie wyliczony, wywołując metodę GetEnumerator bezpośrednio lub używając w foreach języku C# lub For Each w Visual Basic.

Jeśli comparer jest to null, domyślnym porównaniem równości, Defaultjest używany do skrótu i porównywania kluczy.

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

Uwaga

Jeśli dla danego elementu outernie ma skorelowanych elementów inner , sekwencja dopasowań dla tego elementu bę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 outer, kolejność pasujących elementów z inner.

GroupJoin nie ma bezpośredniego odpowiednika w tradycyjnych terminach relacyjnej bazy danych. Jednak ta metoda implementuje nadzbior sprzężeń wewnętrznych i lewe sprzężenia zewnętrzne. Oba te operacje można napisać pod względem sprzężenia grupowanego. Aby uzyskać więcej informacji, zobacz Operacje dołączania.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.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