Enumerable.GroupJoin Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Anahtar eşitliğine göre iki dizinin öğelerini ilişkilendirir ve sonuçları gruplandırın.
Aşırı Yüklemeler
| Name | Description |
|---|---|
| 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. Belirtilen IEqualityComparer<T> , 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>) |
Anahtarların eşitliğine göre iki dizinin öğelerini ilişkilendirir ve sonuçları gruplar. Anahtarları karşılaştırmak için varsayılan eşitlik karşılaştırıcısı kullanılır. |
| 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>)
- Kaynak:
- GroupJoin.cs
- Kaynak:
- GroupJoin.cs
- 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. Belirtilen IEqualityComparer<T> , 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, 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 sıra.
- 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>
Anahtarları karma ve karşılaştırmaya yönelik bir IEqualityComparer<T>.
Döndürülenler
İki dizide gruplandırılmış birleştirme gerçekleştirilerek elde edilen IEnumerable<T> türünde öğeler içeren bir TResult.
Özel durumlar
outer veya inner veya outerKeySelector veya innerKeySelector veya resultSelector şeklindedir null.
Açıklamalar
Bu yöntem ertelenen yürütme kullanılarak uygulanır. Hemen dönüş değeri, eylemi gerçekleştirmek için gereken tüm bilgileri depolayan bir nesnedir. Bu yöntemle temsil edilen sorgu, nesne doğrudan GetEnumerator yöntemini çağırarak veya C# içinde foreach veya Visual Basic'de For Each kullanılarak 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ı Defaultolan kullanılır.
GroupJoin hiyerarşik sonuçlar üretir; bu da outer öğelerinin inner'den eşleşen öğe koleksiyonlarıyla eşleştirildiği anlamına gelir.
GroupJoin, sonuçlarınızı outerher öğesi için bir dizi eşleşmeye dayandırmanıza olanak tanır.
Note
belirli bir inneröğesi için outer bağıntılı öğe yoksa, bu öğenin eşleşme dizisi boş olur ancak sonuçlarda görünmeye devam eder.
resultSelector işlevi, outer öğesiyle eşleşen tüm inner öğelerinin bir koleksiyonuyla birlikte her outer öğesi için yalnızca bir kez çağrılır. Bu, sonuç seçici işlevinin Join bir öğe ve outerbir öğe içeren çiftlerde çağrıldığı inner yönteminden farklıdır.
GroupJoin, outeröğelerinin sırasını ve her outeröğesi için eşleşen öğelerin sırasını innerkorur.
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
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
- Kaynak:
- GroupJoin.cs
- Kaynak:
- GroupJoin.cs
Anahtarların eşitliğine göre iki dizinin öğelerini ilişkilendirir ve sonuçları gruplar. Anahtarları karşılaştırmak için varsayılan eşitlik karşılaştırıcısı 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 sıra.
- 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
İki dizide gruplandırılmış birleştirme gerçekleştirilerek elde edilen IEnumerable<T> türünde öğeler içeren bir TResult.
Özel durumlar
outer veya inner veya outerKeySelector veya innerKeySelector veya resultSelector şeklindedir null.
Örnekler
Aşağıdaki kod örneğinde, iki dizide gruplandırılmış birleştirme gerçekleştirmek için GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>) nasıl kullanılacağı gösterilmektedir.
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 ertelenen yürütme kullanılarak uygulanır. Hemen dönüş değeri, eylemi gerçekleştirmek için gereken tüm bilgileri depolayan bir nesnedir. Bu yöntemle temsil edilen sorgu, nesne doğrudan GetEnumerator yöntemini çağırarak veya C# içinde foreach veya Visual Basic'de For Each kullanılarak numaralandırılana kadar yürütülür.
Varsayılan eşitlik karşılaştırıcısı olan Default, anahtarları karma ve karşılaştırmak için kullanılır.
GroupJoin hiyerarşik sonuçlar üretir; bu da outer öğelerinin inner'den eşleşen öğe koleksiyonlarıyla eşleştirildiği anlamına gelir.
GroupJoin, sonuçlarınızı outerher öğesi için bir dizi eşleşmeye dayandırmanıza olanak tanır.
Note
belirli bir inneröğesi için outer bağıntılı öğe yoksa, bu öğenin eşleşme dizisi boş olur ancak sonuçlarda görünmeye devam eder.
resultSelector işlevi, outer öğesiyle eşleşen tüm inner öğelerinin bir koleksiyonuyla birlikte her outer öğesi için yalnızca bir kez çağrılır. Bu, sonuç seçici işlevinin Join bir öğe ve outeröğesinden bir öğe içeren çiftlerde çağrıldığı inner yönteminden farklıdır.
GroupJoin, outeröğelerinin sırasını ve her outeröğesi için eşleşen öğelerin sırasını innerkorur.
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, GroupJoin çağrısına çevrilir.
Ayrıca bkz.
- Birleştirme işlemleri (C#)
- Join işlemleri (Visual Basic)
- join yan tümcesi (C# Başvurusu)
- Group Join Yan Tümcesi (Visual Basic)
Şunlara uygulanır
GroupJoin<TOuter,TInner,TKey>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, IEqualityComparer<TKey>)
- Kaynak:
- 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ür Parametreleri
- TOuter
- TInner
- TKey
Parametreler
- outer
- IEnumerable<TOuter>
- inner
- IEnumerable<TInner>
- outerKeySelector
- Func<TOuter,TKey>
- innerKeySelector
- Func<TInner,TKey>
- comparer
- IEqualityComparer<TKey>