Queryable.Join Yöntem

Tanım

eşleşen anahtarlara göre iki dizinin öğelerini ilişkilendirir.

Aşırı Yüklemeler

Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>)

eşleşen anahtarlara göre iki dizinin öğelerini ilişkilendirir. Anahtarları karşılaştırmak için varsayılan eşitlik karşılaştırıcısı kullanılır.

Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>, IEqualityComparer<TKey>)

eşleşen anahtarlara göre iki dizinin öğelerini ilişkilendirir. Anahtarları karşılaştırmak için belirtilen bir IEqualityComparer<T> kullanılır.

Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>)

Kaynak:
Queryable.cs
Kaynak:
Queryable.cs
Kaynak:
Queryable.cs

eşleşen anahtarlara göre iki dizinin öğelerini ilişkilendirir. 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::Linq::IQueryable<TResult> ^ Join(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, TInner, TResult> ^> ^ resultSelector);
public static System.Linq.IQueryable<TResult> Join<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,TInner,TResult>> resultSelector);
static member Join : 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, 'Inner, 'Result>> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function Join(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, 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 sıra.

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,TInner,TResult>>

eşleşen iki öğeden sonuç öğesi oluşturmak için bir işlev.

Döndürülenler

IQueryable<TResult>

İki dizide iç birleşim gerçekleştirerek elde edilen TResult türünde öğeleri olan bir IQueryable<T>.

Özel durumlar

outer, inner, outerKeySelector veya innerKeySelector ya da resultSelectornull.

Örnekler

Aşağıdaki kod örneğinde, ortak bir anahtara dayalı olarak iki dizinin iç birleşimini gerçekleştirmek için Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,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 JoinEx1()
{
    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 };

    // Join the list of Person objects and the list of Pet objects
    // to create a list of person-pet pairs where each element is
    // an anonymous type that contains the name of pet and the name
    // of the person that owns the pet.
    var query = people.AsQueryable().Join(pets,
                    person => person,
                    pet => pet.Owner,
                    (person, pet) =>
                        new { OwnerName = person.Name, Pet = pet.Name });

    foreach (var obj in query)
    {
        Console.WriteLine(
            "{0} - {1}",
            obj.OwnerName,
            obj.Pet);
    }
}

/*
    This code produces the following output:

    Hedlund, Magnus - Daisy
    Adams, Terry - Barley
    Adams, Terry - 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 JoinEx1()
    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})

    ' Join the list of Person objects and the list of Pet objects 
    ' to create a list of person-pet pairs where each element is 
    ' an anonymous type that contains pet's name and the name of the
    ' Person object that owns the pet.
    Dim query = people.AsQueryable().Join(pets, _
                    Function(person) person, _
                    Function(pet) pet.Owner, _
                    Function(person, pet) _
                        New With {.OwnerName = person.Name, .Pet = pet.Name})

    Dim output As New System.Text.StringBuilder
    For Each obj In query
        output.AppendLine(String.Format( _
            "{0} - {1}", obj.OwnerName, obj.Pet))
    Next

    ' Display the output.
    MsgBox(output.ToString())
End Sub

' This code produces the following output:

' Hedlund, Magnus - Daisy
' Adams, Terry - Barley
' Adams, Terry - Boots
' Weiss, Charlotte - Whiskers

Açıklamalar

Bu yöntem, tür bağımsız değişkeni Func<T,TResult> türlerinden biri olan Expression<TDelegate> türünde en az bir parametreye sahiptir. Bu parametreler için bir lambda ifadesi geçirebilirsiniz ve bir Expression<TDelegate>derlenir.

Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>) yöntemi, Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>) kendisini oluşturulan genel bir yöntem olarak çağırmayı temsil eden bir MethodCallExpression oluşturur. Ardından MethodCallExpression, outer parametresinin Provider özelliği tarafından temsil edilen IQueryProviderCreateQuery<TElement>(Expression) yöntemine geçirir.

Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>) çağırmayı temsil eden bir ifade ağacının yürütülmesi sonucunda oluşan sorgu davranışı, outer parametresinin türünün uygulanmasına bağlıdır. Beklenen davranış, iç birleşimdir. outerKeySelector ve innerKeySelector işlevleri sırasıyla outer ve inneranahtar ayıklamak için kullanılır. Bu anahtarlar, her diziden öğeleri eşleştirmek için eşitlik için karşılaştırılır. outeriçindeki bir öğeyle eşleşen inner her öğe için bir öğe çifti depolanır. Ardından resultSelector işlevi her eşleşen öğe çiftinden bir sonuç nesnesi yansıtmak için çağrılır.

Şunlara uygulanır

Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>, IEqualityComparer<TKey>)

Kaynak:
Queryable.cs
Kaynak:
Queryable.cs
Kaynak:
Queryable.cs

eşleşen anahtarlara göre iki dizinin öğelerini ilişkilendirir. Anahtarları karşılaştırmak için belirtilen bir IEqualityComparer<T> kullanılır.

public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IQueryable<TResult> ^ Join(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, TInner, TResult> ^> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Linq.IQueryable<TResult> Join<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,TInner,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Linq.IQueryable<TResult> Join<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,TInner,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member Join : 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, 'Inner, 'Result>> * System.Collections.Generic.IEqualityComparer<'Key> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function Join(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, 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 sıra.

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,TInner,TResult>>

eşleşen iki öğeden sonuç öğesi 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

IQueryable<TResult>

İki dizide iç birleşim gerçekleştirerek elde edilen TResult türünde öğeleri olan bir IQueryable<T>.

Özel durumlar

outer, inner, outerKeySelector veya innerKeySelector ya da resultSelectornull.

Açıklamalar

Bu yöntem, tür bağımsız değişkeni Func<T,TResult> türlerinden biri olan Expression<TDelegate> türünde en az bir parametreye sahiptir. Bu parametreler için bir lambda ifadesi geçirebilirsiniz ve bir Expression<TDelegate>derlenir.

Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>, IEqualityComparer<TKey>) yöntemi, Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>, IEqualityComparer<TKey>) kendisini oluşturulan genel bir yöntem olarak çağırmayı temsil eden bir MethodCallExpression oluşturur. Ardından MethodCallExpression, outer parametresinin Provider özelliği tarafından temsil edilen IQueryProviderCreateQuery<TElement>(Expression) yöntemine geçirir.

Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>, IEqualityComparer<TKey>) çağırmayı temsil eden bir ifade ağacının yürütülmesi sonucunda oluşan sorgu davranışı, outer parametresinin türünün uygulanmasına bağlıdır. Beklenen davranış, iç birleşimdir. outerKeySelector ve innerKeySelector işlevleri sırasıyla outer ve inneranahtar ayıklamak için kullanılır. Bu anahtarlar comparerkullanılarak eşitlik için karşılaştırılır. Karşılaştırmaların sonucu, outeriçindeki bir öğeyle eşleşen inner her öğe için eşleşen bir çift oluşturmak için kullanılır. Ardından resultSelector işlevi her eşleşen öğe çiftinden bir sonuç nesnesi yansıtmak için çağrılır.

Şunlara uygulanır