Enumerable.Join Metod

Definition

Korrelerar elementen i två sekvenser baserat på matchande nycklar.

Överlagringar

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

Korrelerar elementen i två sekvenser baserat på matchande nycklar. Standardjämförlikningsjämföraren används för att jämföra nycklar.

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

Korrelerar elementen i två sekvenser baserat på matchande nycklar. En angiven IEqualityComparer<T> används för att jämföra nycklar.

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

Korrelerar elementen i två sekvenser baserat på matchande nycklar. Standardjämförlikningsjämföraren används för att jämföra nycklar.

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)

Typparametrar

TOuter

Typ av element i den första sekvensen.

TInner

Typ av element i den andra sekvensen.

TKey

Typ av nycklar som returneras av nyckelväljarfunktionerna.

TResult

Typ av resultatelement.

Parametrar

outer
IEnumerable<TOuter>

Den första sekvensen som ska kopplas.

inner
IEnumerable<TInner>

Sekvensen som ska kopplas till den första sekvensen.

outerKeySelector
Func<TOuter,TKey>

En funktion för att extrahera kopplingsnyckeln från varje element i den första sekvensen.

innerKeySelector
Func<TInner,TKey>

En funktion för att extrahera kopplingsnyckeln från varje element i den andra sekvensen.

resultSelector
Func<TOuter,TInner,TResult>

En funktion för att skapa ett resultatelement från två matchande element.

Returer

IEnumerable<TResult>

En IEnumerable<T> som har element av typen TResult som hämtas genom att utföra en inre koppling på två sekvenser.

Undantag

outer eller inner eller outerKeySelector eller innerKeySelectorresultSelector är null.

Exempel

Följande kodexempel visar hur du använder Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>) för att utföra en inre koppling av två sekvenser baserat på en gemensam nyckel.

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

Kommentarer

Den här metoden implementeras med uppskjuten körning. Det omedelbara returvärdet är ett objekt som lagrar all information som krävs för att utföra åtgärden. Frågan som representeras av den här metoden körs inte förrän objektet räknas upp antingen genom att anropa metoden GetEnumerator direkt eller med hjälp av foreach i C# eller For Each i Visual Basic.

Standardjämförlikningsjämföraren, Default, används för att hash- och jämförelsenycklar.

En koppling syftar på hur man korrelerar elementen i två informationskällor baserat på en gemensam nyckel. Join innehåller de två informationskällorna och nycklarna som de matchas med i ett metodanrop. Detta skiljer sig från användningen av SelectMany, vilket kräver mer än ett metodanrop för att utföra samma åtgärd.

Join bevarar ordningen på elementen outeri , och för vart och ett av dessa element bevaras ordningen på matchande element i inner.

I frågeuttryckssyntax översätts en join (C#) eller Join-sats (Visual Basic) till ett anrop av Join.

I relationella databastermer Join implementerar metoden en inre motsvarighet. "Inre" innebär att endast element som har en matchning i den andra sekvensen ingår i resultatet. En "equijoin" är en koppling där nycklarna jämförs för likhet. En vänster yttre kopplingsåtgärd har ingen dedikerad standardfrågeoperator, men kan utföras med hjälp GroupJoin av metoden. Mer information finns i Kopplingsåtgärder.

Se även

Gäller för

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

Korrelerar elementen i två sekvenser baserat på matchande nycklar. En angiven IEqualityComparer<T> används för att jämföra nycklar.

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)

Typparametrar

TOuter

Typ av element i den första sekvensen.

TInner

Typ av element i den andra sekvensen.

TKey

Typ av nycklar som returneras av nyckelväljarfunktionerna.

TResult

Typ av resultatelement.

Parametrar

outer
IEnumerable<TOuter>

Den första sekvensen som ska kopplas.

inner
IEnumerable<TInner>

Sekvensen som ska kopplas till den första sekvensen.

outerKeySelector
Func<TOuter,TKey>

En funktion för att extrahera kopplingsnyckeln från varje element i den första sekvensen.

innerKeySelector
Func<TInner,TKey>

En funktion för att extrahera kopplingsnyckeln från varje element i den andra sekvensen.

resultSelector
Func<TOuter,TInner,TResult>

En funktion för att skapa ett resultatelement från två matchande element.

comparer
IEqualityComparer<TKey>

En IEqualityComparer<T> att hash och jämföra nycklar.

Returer

IEnumerable<TResult>

En IEnumerable<T> som har element av typen TResult som hämtas genom att utföra en inre koppling på två sekvenser.

Undantag

outer eller inner eller outerKeySelector eller innerKeySelectorresultSelector är null.

Kommentarer

Den här metoden implementeras med uppskjuten körning. Det omedelbara returvärdet är ett objekt som lagrar all information som krävs för att utföra åtgärden. Frågan som representeras av den här metoden körs inte förrän objektet räknas upp antingen genom att anropa metoden GetEnumerator direkt eller med hjälp av foreach i C# eller For Each i Visual Basic.

Om comparer är nullanvänds standardjämlikhetsjämföraren, Default, för att hash- och jämförelsenycklar.

En koppling syftar på hur man korrelerar elementen i två informationskällor baserat på en gemensam nyckel. Join innehåller de två informationskällorna och nycklarna som de matchas med i ett metodanrop. Detta skiljer sig från användningen av SelectMany, vilket kräver mer än ett metodanrop för att utföra samma åtgärd.

Join bevarar ordningen på elementen outeri , och för vart och ett av dessa element bevaras ordningen på matchande element i inner.

I relationella databastermer Join implementerar metoden en inre motsvarighet. "Inre" innebär att endast element som har en matchning i den andra sekvensen ingår i resultatet. En "equijoin" är en koppling där nycklarna jämförs för likhet. En vänster yttre kopplingsåtgärd har ingen dedikerad standardfrågeoperator, men kan utföras med hjälp GroupJoin av metoden. Mer information finns i Kopplingsåtgärder.

Se även

Gäller för