Queryable.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ırir.
Aşırı Yüklemeler
GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) |
Anahtar 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>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<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>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>)
- Kaynak:
- Queryable.cs
- Kaynak:
- Queryable.cs
- Kaynak:
- Queryable.cs
Anahtar 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::Linq::IQueryable<TResult> ^ GroupJoin(System::Linq::IQueryable<TOuter> ^ outer, System::Collections::Generic::IEnumerable<TInner> ^ inner, System::Linq::Expressions::Expression<Func<TOuter, TKey> ^> ^ outerKeySelector, System::Linq::Expressions::Expression<Func<TInner, TKey> ^> ^ innerKeySelector, System::Linq::Expressions::Expression<Func<TOuter, System::Collections::Generic::IEnumerable<TInner> ^, TResult> ^> ^ resultSelector);
public static System.Linq.IQueryable<TResult> GroupJoin<TOuter,TInner,TKey,TResult> (this System.Linq.IQueryable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, System.Linq.Expressions.Expression<Func<TOuter,TKey>> outerKeySelector, System.Linq.Expressions.Expression<Func<TInner,TKey>> innerKeySelector, System.Linq.Expressions.Expression<Func<TOuter,System.Collections.Generic.IEnumerable<TInner>,TResult>> resultSelector);
static member GroupJoin : System.Linq.IQueryable<'Outer> * seq<'Inner> * System.Linq.Expressions.Expression<Func<'Outer, 'Key>> * System.Linq.Expressions.Expression<Func<'Inner, 'Key>> * System.Linq.Expressions.Expression<Func<'Outer, seq<'Inner>, 'Result>> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function GroupJoin(Of TOuter, TInner, TKey, TResult) (outer As IQueryable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Expression(Of Func(Of TOuter, TKey)), innerKeySelector As Expression(Of Func(Of TInner, TKey)), resultSelector As Expression(Of Func(Of TOuter, IEnumerable(Of TInner), TResult))) As IQueryable(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
- IQueryable<TOuter>
Birleştirecek ilk dizi.
- inner
- IEnumerable<TInner>
İlk diziye katılma sırası.
- outerKeySelector
- Expression<Func<TOuter,TKey>>
İlk dizinin her öğesinden birleştirme anahtarını ayıklamak için bir işlev.
- innerKeySelector
- Expression<Func<TInner,TKey>>
İkinci dizinin her öğesinden birleştirme anahtarını ayıklamak için bir işlev.
- resultSelector
- Expression<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
IQueryable<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>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<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 that are owned by them.
var query =
people.AsQueryable().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
Shared 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 list where each element is an anonymous
' type that contains a person's name and a collection
' of the names of the pets that are owned by them.
Dim query = _
people.AsQueryable().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(String.Format("{0}:", obj.OwnerName))
' Output each of the owner's pet's names.
For Each pet As String In obj.Pets
output.AppendLine(String.Format(" {0}", pet))
Next
Next
' Display the output.
MsgBox(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, tür bağımsız değişkeni türlerden Expression<TDelegate> biri olan türünde en az bir parametreye Func<T,TResult> sahiptir. Bu parametreler için bir lambda ifadesi geçirebilirsiniz ve bu ifade bir Expression<TDelegate>olarak derlenir.
yöntemi, GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>,
Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>,
Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) kendisini oluşturulan genel bir MethodCallExpression yöntem olarak çağıran GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>,
Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>,
Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) bir oluşturur. Ardından parametresinin MethodCallExpressionCreateQuery<TElement>(Expression) özelliği tarafından temsil edilen yöntemine IQueryProviderProviderouter
iletir.
Çağrıyı GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>,
Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>,
Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) temsil eden bir ifade ağacının yürütülmesi sonucunda oluşan sorgu davranışı, parametre türünün uygulanmasına outer
bağlıdır. Beklenen davranış, ve innerKeySelector
işlevlerinin outerKeySelector
sırasıyla ve inner
'den outer
anahtarları ayıklamak için kullanılmasıdır. Bu anahtarlar eşitlik için içindeki her öğeyi outer
öğesinden inner
sıfır veya daha fazla öğeyle eşleşecek şekilde karşılaştırılır. Ardından işlev, her bağıntılı resultSelector
öğe grubundan bir sonuç nesnesi yansıtmak için çağrılır.
Şunlara uygulanır
GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>, IEqualityComparer<TKey>)
- Kaynak:
- Queryable.cs
- Kaynak:
- Queryable.cs
- Kaynak:
- Queryable.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::Linq::IQueryable<TResult> ^ GroupJoin(System::Linq::IQueryable<TOuter> ^ outer, System::Collections::Generic::IEnumerable<TInner> ^ inner, System::Linq::Expressions::Expression<Func<TOuter, TKey> ^> ^ outerKeySelector, System::Linq::Expressions::Expression<Func<TInner, TKey> ^> ^ innerKeySelector, System::Linq::Expressions::Expression<Func<TOuter, System::Collections::Generic::IEnumerable<TInner> ^, TResult> ^> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Linq.IQueryable<TResult> GroupJoin<TOuter,TInner,TKey,TResult> (this System.Linq.IQueryable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, System.Linq.Expressions.Expression<Func<TOuter,TKey>> outerKeySelector, System.Linq.Expressions.Expression<Func<TInner,TKey>> innerKeySelector, System.Linq.Expressions.Expression<Func<TOuter,System.Collections.Generic.IEnumerable<TInner>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Linq.IQueryable<TResult> GroupJoin<TOuter,TInner,TKey,TResult> (this System.Linq.IQueryable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, System.Linq.Expressions.Expression<Func<TOuter,TKey>> outerKeySelector, System.Linq.Expressions.Expression<Func<TInner,TKey>> innerKeySelector, System.Linq.Expressions.Expression<Func<TOuter,System.Collections.Generic.IEnumerable<TInner>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member GroupJoin : System.Linq.IQueryable<'Outer> * seq<'Inner> * System.Linq.Expressions.Expression<Func<'Outer, 'Key>> * System.Linq.Expressions.Expression<Func<'Inner, 'Key>> * System.Linq.Expressions.Expression<Func<'Outer, seq<'Inner>, 'Result>> * System.Collections.Generic.IEqualityComparer<'Key> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function GroupJoin(Of TOuter, TInner, TKey, TResult) (outer As IQueryable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Expression(Of Func(Of TOuter, TKey)), innerKeySelector As Expression(Of Func(Of TInner, TKey)), resultSelector As Expression(Of Func(Of TOuter, IEnumerable(Of TInner), TResult)), comparer As IEqualityComparer(Of TKey)) As IQueryable(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
- IQueryable<TOuter>
Birleştirecek ilk dizi.
- inner
- IEnumerable<TInner>
İlk diziye katılma sırası.
- outerKeySelector
- Expression<Func<TOuter,TKey>>
İlk dizinin her öğesinden birleştirme anahtarını ayıklamak için bir işlev.
- innerKeySelector
- Expression<Func<TInner,TKey>>
İkinci dizinin her öğesinden birleştirme anahtarını ayıklamak için bir işlev.
- resultSelector
- Expression<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 anahtarları için karşılaştırıcı.
Döndürülenler
IQueryable<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, tür bağımsız değişkeni türlerden Expression<TDelegate> biri olan türünde en az bir parametreye Func<T,TResult> sahiptir. Bu parametreler için bir lambda ifadesi geçirebilirsiniz ve bu ifade bir Expression<TDelegate>olarak derlenir.
yöntemi, GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>,
Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>,
Expression<Func<TOuter,IEnumerable<TInner>,TResult>>, IEqualityComparer<TKey>) kendisini oluşturulan genel bir MethodCallExpression yöntem olarak çağıran GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>,
Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>,
Expression<Func<TOuter,IEnumerable<TInner>,TResult>>, IEqualityComparer<TKey>) bir oluşturur. Ardından parametresinin MethodCallExpressionCreateQuery<TElement>(Expression) özelliği tarafından temsil edilen yöntemine IQueryProviderProviderouter
iletir.
Çağrıyı GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>,
Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>,
Expression<Func<TOuter,IEnumerable<TInner>,TResult>>, IEqualityComparer<TKey>) temsil eden bir ifade ağacının yürütülmesi sonucunda oluşan sorgu davranışı, parametre türünün uygulanmasına outer
bağlıdır. Beklenen davranış, ve innerKeySelector
işlevlerinin outerKeySelector
sırasıyla ve inner
'den outer
anahtarları ayıklamak için kullanılmasıdır. Bu anahtarlar kullanılarak comparer
eşitlik için karşılaştırılır. Karşılaştırmaların sonucu, içindeki outer
her öğeyi öğesinden inner
sıfır veya daha fazla öğeyle eşleştirmek için kullanılır. Ardından işlev, her bağıntılı resultSelector
öğe grubundan bir sonuç nesnesi yansıtmak için çağrılır.