Enumerable.GroupJoin Yöntem

Tanım

İki dizinin öğelerini anahtar eşitliğine göre ilişkilendirir ve sonuçları gruplandırir.

Aşırı Yüklemeler

GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>)

Anahtarların eşitliğine göre iki dizinin öğelerini ilişkilendirir ve sonuçları gruplandırir. Varsayılan eşitlik karşılaştırıcısı anahtarları karşılaştırmak için kullanılır.

GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>, IEqualityComparer<TKey>)

Anahtar eşitliğine göre iki dizinin öğelerini ilişkilendirir ve sonuçları gruplandırir. Anahtarları karşılaştırmak için belirtilen IEqualityComparer<T> bir kullanılır.

GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>)

Kaynak:
GroupJoin.cs
Kaynak:
GroupJoin.cs
Kaynak:
GroupJoin.cs

Anahtarların eşitliğine göre iki dizinin öğelerini ilişkilendirir ve sonuçları gruplandırir. Varsayılan eşitlik karşılaştırıcısı anahtarları karşılaştırmak için kullanılır.

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ür Parametreleri

TOuter

İlk dizinin öğelerinin türü.

TInner

İkinci dizinin öğelerinin türü.

TKey

Anahtar seçici işlevleri tarafından döndürülen anahtarların türü.

TResult

Sonuç öğelerinin türü.

Parametreler

outer
IEnumerable<TOuter>

Birleştirecek ilk dizi.

inner
IEnumerable<TInner>

İlk diziye katılma sırası.

outerKeySelector
Func<TOuter,TKey>

İlk dizinin her öğesinden birleştirme anahtarını ayıklamak için bir işlev.

innerKeySelector
Func<TInner,TKey>

İkinci dizinin her öğesinden birleştirme anahtarını ayıklamak için bir işlev.

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

birinci dizideki bir öğeden bir sonuç öğesi ve ikinci diziden eşleşen öğeler koleksiyonu oluşturmak için bir işlev.

Döndürülenler

IEnumerable<TResult>

IEnumerable<T> İki dizide gruplandırılmış birleştirme gerçekleştirilerek elde edilen tür TResult öğelerini içeren.

Özel durumlar

outer veya inner veya outerKeySelector veya innerKeySelector veya resultSelector şeklindedir null.

Örnekler

Aşağıdaki kod örneği, iki dizide gruplandırılmış birleştirme gerçekleştirmek için nasıl kullanılacağını GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>) gösterir.

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

Açıklamalar

Bu yöntem ertelenmiş yürütme kullanılarak uygulanır. Anında dönüş değeri, eylemi gerçekleştirmek için gereken tüm bilgileri depolayan bir nesnedir. Bu yöntemle temsil edilen sorgu, doğrudan yöntemini çağırarak GetEnumerator veya C# içinde veya For Each Visual Basic'te kullanarak foreach nesne numaralandırılana kadar yürütülür.

Varsayılan eşitlik karşılaştırıcısı Defaultolan , anahtarları karma yapmak ve karşılaştırmak için kullanılır.

GroupJoin hiyerarşik sonuçlar üretir. Bu, öğesindeki öğelerin öğesinden outerinnereşleşen öğe koleksiyonlarıyla eşleştirildiği anlamına gelir. GroupJoin , sonuçlarınızı her öğesi için bir dizi eşleşmeye dayandırmanıza outerolanak tanır.

Not

öğesinin belirli bir öğesi için içinde inner bağıntılı outeröğe yoksa, bu öğe için eşleşme dizisi boş olur ancak sonuçlarda görünmeye devam eder.

resultSelector işlevi, öğeyle eşleşen tüm inner öğelerin bir koleksiyonuyla birlikte her outer öğe için yalnızca bir kez çağrılırouter. Bu, sonuç seçici işlevinin Join öğesinden bir öğe ve öğesinden outer bir öğe içeren çiftlerde çağrıldığı yönteminden innerfarklıdır.

GroupJoin , öğelerinin sırasını ve öğesinin outerher öğesi outeriçin öğesinden innereşleşen öğelerin sırasını korur.

GroupJoin geleneksel ilişkisel veritabanı terimlerinde doğrudan eşdeğeri yoktur. Ancak, bu yöntem iç birleşimlerin ve sol dış birleşimlerin üst kümesini uygular. Bu işlemlerin her ikisi de gruplandırılmış birleştirme açısından yazılabilir. Daha fazla bilgi için bkz . Birleştirme işlemleri.

Sorgu ifadesi söz diziminde, ( join ... into C#) veya Group Join (Visual Basic) yan tümcesi çağrısına çevrilir GroupJoin.

Ayrıca bkz.

Şunlara uygulanır

GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>, IEqualityComparer<TKey>)

Kaynak:
GroupJoin.cs
Kaynak:
GroupJoin.cs
Kaynak:
GroupJoin.cs

Anahtar eşitliğine göre iki dizinin öğelerini ilişkilendirir ve sonuçları gruplandırir. Anahtarları karşılaştırmak için belirtilen IEqualityComparer<T> bir kullanılır.

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ür Parametreleri

TOuter

İlk dizinin öğelerinin türü.

TInner

İkinci dizinin öğelerinin türü.

TKey

Anahtar seçici işlevleri tarafından döndürülen anahtarların türü.

TResult

Sonuç öğelerinin türü.

Parametreler

outer
IEnumerable<TOuter>

Birleştirecek ilk dizi.

inner
IEnumerable<TInner>

İlk diziye katılma sırası.

outerKeySelector
Func<TOuter,TKey>

İlk dizinin her öğesinden birleştirme anahtarını ayıklamak için bir işlev.

innerKeySelector
Func<TInner,TKey>

İkinci dizinin her öğesinden birleştirme anahtarını ayıklamak için bir işlev.

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

birinci dizideki bir öğeden bir sonuç öğesi ve ikinci diziden eşleşen öğeler koleksiyonu oluşturmak için bir işlev.

comparer
IEqualityComparer<TKey>

Karma anahtarlar ve karşılaştırma için bir IEqualityComparer<T> .

Döndürülenler

IEnumerable<TResult>

IEnumerable<T> İki dizide gruplandırılmış birleştirme gerçekleştirilerek elde edilen tür TResult öğelerini içeren.

Özel durumlar

outer veya inner veya outerKeySelector veya innerKeySelector veya resultSelector şeklindedir null.

Açıklamalar

Bu yöntem ertelenmiş yürütme kullanılarak uygulanır. Anında dönüş değeri, eylemi gerçekleştirmek için gereken tüm bilgileri depolayan bir nesnedir. Bu yöntemle temsil edilen sorgu, doğrudan yöntemini çağırarak GetEnumerator veya C# içinde veya For Each Visual Basic'te kullanarak foreach nesne numaralandırılana kadar yürütülür.

ise comparernull, anahtarları karma yapmak ve karşılaştırmak için varsayılan eşitlik karşılaştırıcısı Defaultkullanılır.

GroupJoin hiyerarşik sonuçlar üretir. Bu, öğesindeki öğelerin öğesinden outerinnereşleşen öğe koleksiyonlarıyla eşleştirildiği anlamına gelir. GroupJoin , sonuçlarınızı her öğesi için bir dizi eşleşmeye dayandırmanıza outerolanak tanır.

Not

öğesinin belirli bir öğesi için içinde inner bağıntılı outeröğe yoksa, bu öğe için eşleşme dizisi boş olur ancak sonuçlarda görünmeye devam eder.

resultSelector işlevi, öğeyle eşleşen tüm inner öğelerin bir koleksiyonuyla birlikte her outer öğe için yalnızca bir kez çağrılırouter. Bu, bir öğesinden ve öğesinden bir öğe içeren çiftlerde sonuç seçici işlevinin çağrıldığı yöntemden outerinnerfarklıdırJoin.

GroupJoin , öğelerinin sırasını ve öğesinin outerher öğesi outeriçin öğesinden innereşleşen öğelerin sırasını korur.

GroupJoin geleneksel ilişkisel veritabanı terimlerinde doğrudan eşdeğeri yoktur. Ancak, bu yöntem iç birleşimlerin ve sol dış birleşimlerin üst kümesini uygular. Bu işlemlerin her ikisi de gruplandırılmış birleştirme açısından yazılabilir. Daha fazla bilgi için bkz . Birleştirme işlemleri.

Ayrıca bkz.

Şunlara uygulanır