Enumerable.Join Metoda

Definicja

Skorelowanie elementów dwóch sekwencji na podstawie pasujących kluczy.Correlates the elements of two sequences based on matching keys.

Przeciążenia

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

Skorelowanie elementów dwóch sekwencji na podstawie pasujących kluczy.Correlates the elements of two sequences based on matching keys. Domyślna funkcja porównująca równość jest używana do porównywania kluczy.The default equality comparer is used to compare keys.

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

Skorelowanie elementów dwóch sekwencji na podstawie pasujących kluczy.Correlates the elements of two sequences based on matching keys. Określony IEqualityComparer<T> jest używany do porównywania kluczy.A specified IEqualityComparer<T> is used to compare keys.

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

Skorelowanie elementów dwóch sekwencji na podstawie pasujących kluczy.Correlates the elements of two sequences based on matching keys. Domyślna funkcja porównująca równość jest używana do porównywania kluczy.The default equality comparer is used to compare keys.

public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ Join(System::Collections::Generic::IEnumerable<TOuter> ^ outer, System::Collections::Generic::IEnumerable<TInner> ^ inner, Func<TOuter, TKey> ^ outerKeySelector, Func<TInner, TKey> ^ innerKeySelector, Func<TOuter, TInner, TResult> ^ resultSelector);
public static System.Collections.Generic.IEnumerable<TResult> Join<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,TInner,TResult> resultSelector);
static member Join : seq<'Outer> * seq<'Inner> * Func<'Outer, 'Key> * Func<'Inner, 'Key> * Func<'Outer, 'Inner, 'Result> -> seq<'Result>
<Extension()>
Public Function Join(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, TInner, TResult)) As IEnumerable(Of TResult)

Parametry typu

TOuter

Typ elementów pierwszej sekwencji.The type of the elements of the first sequence.

TInner

Typ elementów drugiej sekwencji.The type of the elements of the second sequence.

TKey

Typ kluczy zwracanych przez funkcje przełącznika kluczowego.The type of the keys returned by the key selector functions.

TResult

Typ elementów wyniku.The type of the result elements.

Parametry

outer
IEnumerable<TOuter>

Pierwsza sekwencja do przyłączenia.The first sequence to join.

inner
IEnumerable<TInner>

Sekwencja do przyłączenia do pierwszej sekwencji.The sequence to join to the first sequence.

outerKeySelector
Func<TOuter,TKey>

Funkcja wyodrębniania klucza łączenia z każdego elementu pierwszej sekwencji.A function to extract the join key from each element of the first sequence.

innerKeySelector
Func<TInner,TKey>

Funkcja wyodrębniania klucza łączenia z każdego elementu drugiej sekwencji.A function to extract the join key from each element of the second sequence.

resultSelector
Func<TOuter,TInner,TResult>

Funkcja do tworzenia elementu wyniku z dwóch zgodnych elementów.A function to create a result element from two matching elements.

Zwraca

IEnumerable<TResult>

IEnumerable<T>, które mają elementy typu TResult, które są uzyskiwane przez wykonywanie sprzężenia wewnętrznego na dwie sekwencje.An IEnumerable<T> that has elements of type TResult that are obtained by performing an inner join on two sequences.

Wyjątki

resultSelector outer lub inner lub outerKeySelector lub innerKeySelector lub null.outer or inner or outerKeySelector or innerKeySelector or resultSelector is null.

Przykłady

Poniższy przykład kodu demonstruje, jak używać Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>) do wykonywania wewnętrznego przyłączania dwóch sekwencji w oparciu o wspólny klucz.The following code example demonstrates how to use Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>) to perform an inner join of two sequences based on a common key.

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 };

    // Create a list of Person-Pet pairs where 
    // each element is an anonymous type that contains a
    // Pet's name and the name of the Person that owns the Pet.
    var query =
        people.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

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})

    ' Create a list of Person-Pet pairs, where each element is an
    ' anonymous type that contains a Pet's name and the name of the 
    ' Person that owns the Pet.
    Dim query =
people.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(obj.OwnerName & " - " & obj.Pet)
    Next

    ' Display the output.
    Console.WriteLine(output.ToString)
End Sub

' This code produces the following output:
'
' Hedlund, Magnus - Daisy
' Adams, Terry - Barley
' Adams, Terry - Boots
' Weiss, Charlotte - Whiskers

Uwagi

Ta metoda jest implementowana za pomocą odroczonego wykonania.This method is implemented by using deferred execution. Bezpośrednio zwracana wartość jest obiektem, który przechowuje wszystkie informacje wymagane do wykonania akcji.The immediate return value is an object that stores all the information that is required to perform the action. Zapytanie reprezentowane przez tę metodę nie jest wykonywane do momentu wyliczenia obiektu przez wywołanie jego metody GetEnumerator bezpośrednio lub przy użyciu foreach w wizualizacji C# lub For Each w Visual Basic.The query represented by this method is not executed until the object is enumerated either by calling its GetEnumerator method directly or by using foreach in Visual C# or For Each in Visual Basic.

Domyślna funkcja porównująca równość, Defaultjest używana do mieszania i porównywania kluczy.The default equality comparer, Default, is used to hash and compare keys.

Sprzężenie odnosi się do operacji skorelowania elementów dwóch źródeł informacji w oparciu o wspólny klucz.A join refers to the operation of correlating the elements of two sources of information based on a common key. Join udostępnia dwa źródła informacji oraz klucze, za pomocą których są one dopasowywane w jednym wywołaniu metody.Join brings the two information sources and the keys by which they are matched together in one method call. Różni się to od użycia SelectMany, co wymaga więcej niż jedno wywołanie metody do wykonania tej samej operacji.This differs from the use of SelectMany, which requires more than one method call to perform the same operation.

Join zachowuje kolejność elementów outeri dla każdego z tych elementów, kolejność pasujących elementów inner.Join preserves the order of the elements of outer, and for each of these elements, the order of the matching elements of inner.

W składni wyrażenia zapytania, klauzula join (wizualizacja C#) lub Join (Visual Basic) tłumaczy na wywołanie Join.In query expression syntax, a join (Visual C#) or Join (Visual Basic) clause translates to an invocation of Join.

W terminologii relacyjnej bazy danych Metoda Join implementuje wewnętrzny equijoin.In relational database terms, the Join method implements an inner equijoin. "Inner" oznacza, że tylko elementy, które mają dopasowanie w innej sekwencji, są uwzględniane w wynikach.'Inner' means that only elements that have a match in the other sequence are included in the results. "Equijoin" to sprzężenie, w którym klucze są porównywane pod kątem równości.An 'equijoin' is a join in which the keys are compared for equality. Nie ma dedykowanego standardowego operatora zapytania z lewej strony, ale można go wykonać przy użyciu metody GroupJoin.A left outer join operation has no dedicated standard query operator, but can be performed by using the GroupJoin method. Zobacz Operacje łączenia.See Join Operations.

Zobacz też

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

Skorelowanie elementów dwóch sekwencji na podstawie pasujących kluczy.Correlates the elements of two sequences based on matching keys. Określony IEqualityComparer<T> jest używany do porównywania kluczy.A specified IEqualityComparer<T> is used to compare keys.

public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ Join(System::Collections::Generic::IEnumerable<TOuter> ^ outer, System::Collections::Generic::IEnumerable<TInner> ^ inner, Func<TOuter, TKey> ^ outerKeySelector, Func<TInner, TKey> ^ innerKeySelector, Func<TOuter, TInner, TResult> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Collections.Generic.IEnumerable<TResult> Join<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,TInner,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
static member Join : seq<'Outer> * seq<'Inner> * Func<'Outer, 'Key> * Func<'Inner, 'Key> * Func<'Outer, 'Inner, 'Result> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<'Result>
<Extension()>
Public Function Join(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, TInner, TResult), comparer As IEqualityComparer(Of TKey)) As IEnumerable(Of TResult)

Parametry typu

TOuter

Typ elementów pierwszej sekwencji.The type of the elements of the first sequence.

TInner

Typ elementów drugiej sekwencji.The type of the elements of the second sequence.

TKey

Typ kluczy zwracanych przez funkcje przełącznika kluczowego.The type of the keys returned by the key selector functions.

TResult

Typ elementów wyniku.The type of the result elements.

Parametry

outer
IEnumerable<TOuter>

Pierwsza sekwencja do przyłączenia.The first sequence to join.

inner
IEnumerable<TInner>

Sekwencja do przyłączenia do pierwszej sekwencji.The sequence to join to the first sequence.

outerKeySelector
Func<TOuter,TKey>

Funkcja wyodrębniania klucza łączenia z każdego elementu pierwszej sekwencji.A function to extract the join key from each element of the first sequence.

innerKeySelector
Func<TInner,TKey>

Funkcja wyodrębniania klucza łączenia z każdego elementu drugiej sekwencji.A function to extract the join key from each element of the second sequence.

resultSelector
Func<TOuter,TInner,TResult>

Funkcja do tworzenia elementu wyniku z dwóch zgodnych elementów.A function to create a result element from two matching elements.

comparer
IEqualityComparer<TKey>

IEqualityComparer<T> do mieszania i porównywania kluczy.An IEqualityComparer<T> to hash and compare keys.

Zwraca

IEnumerable<TResult>

IEnumerable<T>, które mają elementy typu TResult, które są uzyskiwane przez wykonywanie sprzężenia wewnętrznego na dwie sekwencje.An IEnumerable<T> that has elements of type TResult that are obtained by performing an inner join on two sequences.

Wyjątki

resultSelector outer lub inner lub outerKeySelector lub innerKeySelector lub null.outer or inner or outerKeySelector or innerKeySelector or resultSelector is null.

Uwagi

Ta metoda jest implementowana za pomocą odroczonego wykonania.This method is implemented by using deferred execution. Bezpośrednio zwracana wartość jest obiektem, który przechowuje wszystkie informacje wymagane do wykonania akcji.The immediate return value is an object that stores all the information that is required to perform the action. Zapytanie reprezentowane przez tę metodę nie jest wykonywane do momentu wyliczenia obiektu przez wywołanie jego metody GetEnumerator bezpośrednio lub przy użyciu foreach w wizualizacji C# lub For Each w Visual Basic.The query represented by this method is not executed until the object is enumerated either by calling its GetEnumerator method directly or by using foreach in Visual C# or For Each in Visual Basic.

Jeśli comparer jest null, domyślna funkcja porównująca równość, Defaultjest używana do mieszania i porównywania kluczy.If comparer is null, the default equality comparer, Default, is used to hash and compare keys.

Sprzężenie odnosi się do operacji skorelowania elementów dwóch źródeł informacji w oparciu o wspólny klucz.A join refers to the operation of correlating the elements of two sources of information based on a common key. Join udostępnia dwa źródła informacji oraz klucze, za pomocą których są one dopasowywane w jednym wywołaniu metody.Join brings the two information sources and the keys by which they are matched together in one method call. Różni się to od użycia SelectMany, co wymaga więcej niż jedno wywołanie metody do wykonania tej samej operacji.This differs from the use of SelectMany, which requires more than one method call to perform the same operation.

Join zachowuje kolejność elementów outeri dla każdego z tych elementów, kolejność pasujących elementów inner.Join preserves the order of the elements of outer, and for each of these elements, the order of the matching elements of inner.

W terminologii relacyjnej bazy danych Metoda Join implementuje wewnętrzny equijoin.In relational database terms, the Join method implements an inner equijoin. "Inner" oznacza, że tylko elementy, które mają dopasowanie w innej sekwencji, są uwzględniane w wynikach.'Inner' means that only elements that have a match in the other sequence are included in the results. "Equijoin" to sprzężenie, w którym klucze są porównywane pod kątem równości.An 'equijoin' is a join in which the keys are compared for equality. Nie ma dedykowanego standardowego operatora zapytania z lewej strony, ale można go wykonać przy użyciu metody GroupJoin.A left outer join operation has no dedicated standard query operator, but can be performed by using the GroupJoin method. Zobacz Operacje łączenia.See Join Operations.

Zobacz też

Dotyczy