Enumerable.GroupJoin Metódus

Definíció

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

IEnumerable<TResult>

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

IEnumerable<TResult>

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

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>

Válaszok

IEnumerable<IGrouping<TOuter,TInner>>

A következőre érvényes: