Enumerable.GroupJoin Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
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ż
- Operacje sprzężenia (C#)
- operacje Join (Visual Basic)
- join, klauzula (odwołanie w C#)
- Group Join— Klauzula (Visual Basic)
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
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.