Enumerable.GroupJoin Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Két sorozat elemeit korrelálja a kulcsegyenlőség alapján, és csoportosítja az eredményeket.
Túlterhelések
| Name | Description |
|---|---|
| GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>, IEqualityComparer<TKey>) |
Két sorozat elemeit korrelálja a kulcsegyenlőség alapján, és csoportosítja az eredményeket. A megadott IEqualityComparer<T> érték a kulcsok összehasonlítására szolgál. |
| GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>) |
Két sorozat elemeit korrelálja a kulcsok egyenlősége alapján, és csoportosítja az eredményeket. Az alapértelmezett egyenlőség-összehasonlító a kulcsok összehasonlítására szolgál. |
| GroupJoin<TOuter,TInner,TKey>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, IEqualityComparer<TKey>) |
GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>, IEqualityComparer<TKey>)
- Forrás:
- GroupJoin.cs
- Forrás:
- GroupJoin.cs
- Forrás:
- GroupJoin.cs
- Forrás:
- GroupJoin.cs
- Forrás:
- GroupJoin.cs
Két sorozat elemeit korrelálja a kulcsegyenlőség alapján, és csoportosítja az eredményeket. A megadott IEqualityComparer<T> érték a kulcsok összehasonlítására szolgál.
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)
Típusparaméterek
- TOuter
Az első sorozat elemeinek típusa.
- TInner
A második sorozat elemeinek típusa.
- TKey
A kulcsválasztó függvények által visszaadott kulcsok típusa.
- TResult
Az eredményelemek típusa.
Paraméterek
- outer
- IEnumerable<TOuter>
Az első illesztendő sorozat.
- inner
- IEnumerable<TInner>
Az első sorozathoz illesztendő sorozat.
- outerKeySelector
- Func<TOuter,TKey>
Egy függvény, amely kinyeri az illesztőkulcsot az első sorozat minden eleméből.
- innerKeySelector
- Func<TInner,TKey>
Egy függvény, amely kinyeri az illesztőkulcsot a második sorozat minden eleméből.
- resultSelector
- Func<TOuter,IEnumerable<TInner>,TResult>
Egy függvény, amely egy eredményelemet hoz létre az első sorozat egy eleméből, és egyező elemek gyűjteményét a második sorozatból.
- comparer
- IEqualityComparer<TKey>
Egy IEqualityComparer<T> kivonat, és hasonlítsa össze a kulcsokat.
Válaszok
Olyan IEnumerable<T> típusú TResult elemeket tartalmaz, amelyeket egy csoportosított illesztés két sorozaton történő végrehajtásával szerez be.
Kivételek
outervagy inner vagy outerKeySelectorinnerKeySelectorresultSelector az.null
Megjegyzések
Ezt a metódust halasztott végrehajtással implementáljuk. Az azonnali visszatérési érték egy objektum, amely a művelet végrehajtásához szükséges összes információt tárolja. A metódus által képviselt lekérdezés csak akkor lesz végrehajtva, ha az objektumot a GetEnumerator metódus közvetlen meghívásával vagy foreach c# vagy For Each használatával Visual Basic.
Ha comparer igen null, akkor az alapértelmezett egyenlőség-összehasonlító a Defaultkulcsok kivonatára és összehasonlítására szolgál.
GroupJoinhierarchikus eredményeket hoz létre, ami azt jelenti, hogy a rendszer az elemeket outer egyező elemek gyűjteményeivel párosítja.inner
GroupJoin lehetővé teszi, hogy az eredményeket egy teljes egyezés-halmazra alapozza az egyes elemekhez outer.
Note
Ha egy adott elemhez innernincsenek korrelált elemekouter, akkor az elem egyezéseinek sorrendje üres lesz, de továbbra is megjelenik az eredményekben.
A resultSelector függvényt csak egyszer hívjuk meg az egyes outer elemekhez, valamint az inner elemnek megfelelő összes elem gyűjteményét outer . Ez eltér attól a Join metódustól, amelyben az eredményválasztó függvény meghívása olyan párokon történik, amelyekből egy elem és outer egy elem származik inner.
GroupJoin megőrzi a megfelelő elemek outersorrendjét , és az elemek minden elemére outervonatkozóan a következőtől: inner.
GroupJoin nincs közvetlen egyenértékű a hagyományos relációs adatbázis szempontjából. Ez a módszer azonban a belső illesztések és a bal oldali külső illesztések szuperhalmazát implementálja. Mindkét művelet csoportosított illesztésként írható. További információ: Csatlakozás műveletek.
Lásd még
A következőre érvényes:
GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>)
- Forrás:
- GroupJoin.cs
- Forrás:
- GroupJoin.cs
- Forrás:
- GroupJoin.cs
- Forrás:
- GroupJoin.cs
- Forrás:
- GroupJoin.cs
Két sorozat elemeit korrelálja a kulcsok egyenlősége alapján, és csoportosítja az eredményeket. Az alapértelmezett egyenlőség-összehasonlító a kulcsok összehasonlítására szolgál.
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)
Típusparaméterek
- TOuter
Az első sorozat elemeinek típusa.
- TInner
A második sorozat elemeinek típusa.
- TKey
A kulcsválasztó függvények által visszaadott kulcsok típusa.
- TResult
Az eredményelemek típusa.
Paraméterek
- outer
- IEnumerable<TOuter>
Az első illesztendő sorozat.
- inner
- IEnumerable<TInner>
Az első sorozathoz illesztendő sorozat.
- outerKeySelector
- Func<TOuter,TKey>
Egy függvény, amely kinyeri az illesztőkulcsot az első sorozat minden eleméből.
- innerKeySelector
- Func<TInner,TKey>
Egy függvény, amely kinyeri az illesztőkulcsot a második sorozat minden eleméből.
- resultSelector
- Func<TOuter,IEnumerable<TInner>,TResult>
Egy függvény, amely egy eredményelemet hoz létre az első sorozat egy eleméből, és egyező elemek gyűjteményét a második sorozatból.
Válaszok
Olyan IEnumerable<T> típusú TResult elemeket tartalmaz, amelyeket egy csoportosított illesztés két sorozaton történő végrehajtásával szerez be.
Kivételek
outervagy inner vagy outerKeySelectorinnerKeySelectorresultSelector az.null
Példák
Az alábbi példakód bemutatja, hogyan lehet GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>) csoportosított illesztéseket végrehajtani két sorozaton.
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
Megjegyzések
Ezt a metódust halasztott végrehajtással implementáljuk. Az azonnali visszatérési érték egy objektum, amely a művelet végrehajtásához szükséges összes információt tárolja. A metódus által képviselt lekérdezés csak akkor lesz végrehajtva, ha az objektumot a GetEnumerator metódus közvetlen meghívásával vagy foreach c# vagy For Each használatával Visual Basic.
Az alapértelmezett egyenlőség-összehasonlító a Defaultkulcsok kivonatára és összehasonlítására szolgál.
GroupJoinhierarchikus eredményeket hoz létre, ami azt jelenti, hogy a rendszer az elemeket outer egyező elemek gyűjteményeivel párosítja.inner
GroupJoin lehetővé teszi, hogy az eredményeket egy teljes egyezés-halmazra alapozza az egyes elemekhez outer.
Note
Ha egy adott elemhez innernincsenek korrelált elemekouter, akkor az elem egyezéseinek sorrendje üres lesz, de továbbra is megjelenik az eredményekben.
A resultSelector függvényt csak egyszer hívjuk meg az egyes outer elemekhez, valamint az inner elemnek megfelelő összes elem gyűjteményét outer . Ez eltér a Join metódustól, amelyben az eredményválasztó függvényt olyan párokon hívja meg a függvény, amelyekből egy elem és outer egy elem származik inner.
GroupJoin megőrzi a megfelelő elemek outersorrendjét , és az elemek minden elemére outervonatkozóan a következőtől: inner.
GroupJoin nincs közvetlen egyenértékű a hagyományos relációs adatbázis szempontjából. Ez a módszer azonban a belső illesztések és a bal oldali külső illesztések szuperhalmazát implementálja. Mindkét művelet csoportosított illesztésként írható. További információ: Csatlakozás műveletek.
A lekérdezési kifejezés szintaxisában egy join ... into (C#) vagy Group Join (Visual Basic) záradék GroupJoin meghívására fordít.
Lásd még
- Illesztési műveletek (C#)
- Csatlakozási műveletek (Visual Basic)
- join záradék (C# referencia)
- Group Join Clause (Visual Basic)
A következőre érvényes:
GroupJoin<TOuter,TInner,TKey>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, IEqualityComparer<TKey>)
- Forrás:
- GroupJoin.cs
public static System.Collections.Generic.IEnumerable<System.Linq.IGrouping<TOuter,TInner>> GroupJoin<TOuter,TInner,TKey>(this System.Collections.Generic.IEnumerable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, Func<TOuter,TKey> outerKeySelector, Func<TInner,TKey> innerKeySelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer = default);
static member GroupJoin : seq<'Outer> * seq<'Inner> * Func<'Outer, 'Key> * Func<'Inner, 'Key> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<System.Linq.IGrouping<'Outer, 'Inner>>
<Extension()>
Public Function GroupJoin(Of TOuter, TInner, TKey) (outer As IEnumerable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Func(Of TOuter, TKey), innerKeySelector As Func(Of TInner, TKey), Optional comparer As IEqualityComparer(Of TKey) = Nothing) As IEnumerable(Of IGrouping(Of TOuter, TInner))
Típusparaméterek
- TOuter
- TInner
- TKey
Paraméterek
- outer
- IEnumerable<TOuter>
- inner
- IEnumerable<TInner>
- outerKeySelector
- Func<TOuter,TKey>
- innerKeySelector
- Func<TInner,TKey>
- comparer
- IEqualityComparer<TKey>