Enumerable.GroupJoin Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Korrelerar elementen i två sekvenser baserat på nyckeljämlikhet och grupperar resultatet.
Överlagringar
| Name | Description |
|---|---|
| GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>, IEqualityComparer<TKey>) |
Korrelerar elementen i två sekvenser baserat på nyckeljämlikhet och grupperar resultaten. En angiven IEqualityComparer<T> används för att jämföra nycklar. |
| GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>) |
Korrelerar elementen i två sekvenser baserat på likhet mellan nycklar och grupperar resultatet. Standardjämförlikningsjämföraren används för att jämföra nycklar. |
GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>, IEqualityComparer<TKey>)
Korrelerar elementen i två sekvenser baserat på nyckeljämlikhet och grupperar resultaten. En angiven IEqualityComparer<T> används för att jämföra nycklar.
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);
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)
Typparametrar
- TOuter
Typ av element i den första sekvensen.
- TInner
Typ av element i den andra sekvensen.
- TKey
Typ av nycklar som returneras av nyckelväljarfunktionerna.
- TResult
Typ av resultatelement.
Parametrar
- outer
- IEnumerable<TOuter>
Den första sekvensen som ska kopplas.
- inner
- IEnumerable<TInner>
Sekvensen som ska kopplas till den första sekvensen.
- outerKeySelector
- Func<TOuter,TKey>
En funktion för att extrahera kopplingsnyckeln från varje element i den första sekvensen.
- innerKeySelector
- Func<TInner,TKey>
En funktion för att extrahera kopplingsnyckeln från varje element i den andra sekvensen.
- resultSelector
- Func<TOuter,IEnumerable<TInner>,TResult>
En funktion för att skapa ett resultatelement från ett element från den första sekvensen och en samling matchande element från den andra sekvensen.
- comparer
- IEqualityComparer<TKey>
En IEqualityComparer<T> att hash och jämföra nycklar.
Returer
En IEnumerable<T> som innehåller element av typen TResult som hämtas genom att utföra en grupperad koppling på två sekvenser.
Undantag
outer eller inner eller outerKeySelector eller innerKeySelectorresultSelector är null.
Kommentarer
Den här metoden implementeras med uppskjuten körning. Det omedelbara returvärdet är ett objekt som lagrar all information som krävs för att utföra åtgärden. Frågan som representeras av den här metoden körs inte förrän objektet räknas upp antingen genom att anropa metoden GetEnumerator direkt eller med hjälp av foreach i C# eller For Each i Visual Basic.
Om comparer är nullanvänds standardjämlikhetsjämföraren, Default, för att hash- och jämförelsenycklar.
GroupJoin genererar hierarkiska resultat, vilket innebär att element från outer paras ihop med samlingar med matchande element från inner.
GroupJoin gör att du kan basera resultatet på en hel uppsättning matchningar för varje element i outer.
Note
Om det inte finns några korrelerade element i inner för ett visst element i outerkommer matchningssekvensen för det elementet att vara tom men visas fortfarande i resultatet.
Funktionen resultSelector anropas bara en gång för varje outer element tillsammans med en samling av alla inner element som matchar elementet outer . Detta skiljer sig från metoden Join där resultatväljarens funktion anropas på par som innehåller ett element från outer och ett element från inner.
GroupJoin bevarar ordningen på elementen outeri , och för varje element outeri , ordningen på matchande element från inner.
GroupJoin har ingen direkt motsvarighet i traditionella relationsdatabastermer. Den här metoden implementerar dock en superuppsättning inre kopplingar och vänster yttre kopplingar. Båda dessa åtgärder kan skrivas i termer av en grupperad koppling. Mer information finns i Kopplingsåtgärder.
Se även
Gäller för
GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>)
Korrelerar elementen i två sekvenser baserat på likhet mellan nycklar och grupperar resultatet. Standardjämförlikningsjämföraren används för att jämföra nycklar.
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)
Typparametrar
- TOuter
Typ av element i den första sekvensen.
- TInner
Typ av element i den andra sekvensen.
- TKey
Typ av nycklar som returneras av nyckelväljarfunktionerna.
- TResult
Typ av resultatelement.
Parametrar
- outer
- IEnumerable<TOuter>
Den första sekvensen som ska kopplas.
- inner
- IEnumerable<TInner>
Sekvensen som ska kopplas till den första sekvensen.
- outerKeySelector
- Func<TOuter,TKey>
En funktion för att extrahera kopplingsnyckeln från varje element i den första sekvensen.
- innerKeySelector
- Func<TInner,TKey>
En funktion för att extrahera kopplingsnyckeln från varje element i den andra sekvensen.
- resultSelector
- Func<TOuter,IEnumerable<TInner>,TResult>
En funktion för att skapa ett resultatelement från ett element från den första sekvensen och en samling matchande element från den andra sekvensen.
Returer
En IEnumerable<T> som innehåller element av typen TResult som hämtas genom att utföra en grupperad koppling på två sekvenser.
Undantag
outer eller inner eller outerKeySelector eller innerKeySelectorresultSelector är null.
Exempel
Följande kodexempel visar hur du använder GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>) för att utföra en grupperad koppling i två sekvenser.
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
Kommentarer
Den här metoden implementeras med uppskjuten körning. Det omedelbara returvärdet är ett objekt som lagrar all information som krävs för att utföra åtgärden. Frågan som representeras av den här metoden körs inte förrän objektet räknas upp antingen genom att anropa metoden GetEnumerator direkt eller med hjälp av foreach i C# eller For Each i Visual Basic.
Standardjämförlikningsjämföraren, Default, används för att hash- och jämförelsenycklar.
GroupJoin genererar hierarkiska resultat, vilket innebär att element från outer paras ihop med samlingar med matchande element från inner.
GroupJoin gör att du kan basera resultatet på en hel uppsättning matchningar för varje element i outer.
Note
Om det inte finns några korrelerade element i inner för ett visst element i outerkommer matchningssekvensen för det elementet att vara tom men visas fortfarande i resultatet.
Funktionen resultSelector anropas bara en gång för varje outer element tillsammans med en samling av alla inner element som matchar elementet outer . Detta skiljer sig från Join metoden där resultatväljarens funktion anropas på par som innehåller ett element från outer och ett element från inner.
GroupJoin bevarar ordningen på elementen outeri , och för varje element outeri , ordningen på matchande element från inner.
GroupJoin har ingen direkt motsvarighet i traditionella relationsdatabastermer. Den här metoden implementerar dock en superuppsättning inre kopplingar och vänster yttre kopplingar. Båda dessa åtgärder kan skrivas i termer av en grupperad koppling. Mer information finns i Kopplingsåtgärder.
I frågeuttryckssyntax översätts en join ... into (C#) eller Group Join-sats (Visual Basic) till ett anrop av GroupJoin.
Se även
- Kopplingsåtgärder (C#)
- Join-åtgärder (Visual Basic)
- join-sats (C#-referens)
- Group Join Clause (Visual Basic)