Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Queryable.Join<TOuter, TInner, TKey, TResult>-Methode: (IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter, TKey>>, Expression<Func<TInner, TKey>>, Expression<Func<TOuter, TInner, TResult>>)

 

Veröffentlicht: Oktober 2016

Korreliert die Elemente zweier Sequenzen basierend auf übereinstimmenden Schlüsseln. Schlüssel werden mithilfe des Standardgleichheitsvergleichs verglichen.

Namespace:   System.Linq
Assembly:  System.Core (in System.Core.dll)

public static IQueryable<TResult> Join<TOuter, TInner, TKey, TResult>(
	this IQueryable<TOuter> outer,
	IEnumerable<TInner> inner,
	Expression<Func<TOuter, TKey>> outerKeySelector,
	Expression<Func<TInner, TKey>> innerKeySelector,
	Expression<Func<TOuter, TInner, TResult>> resultSelector
)

Parameter

outer
Type: System.Linq.IQueryable<TOuter>

Die erste zu verknüpfende Sequenz.

inner
Type: System.Collections.Generic.IEnumerable<TInner>

Die Sequenz, die mit der ersten Sequenz verknüpft werden soll.

outerKeySelector
Type: System.Linq.Expressions.Expression<Func<TOuter, TKey>>

Eine Funktion zum Extrahieren des Joinschlüssels aus jedem Element der ersten Sequenz.

innerKeySelector
Type: System.Linq.Expressions.Expression<Func<TInner, TKey>>

Eine Funktion zum Extrahieren des Joinschlüssels aus jedem Element der zweiten Sequenz.

resultSelector
Type: System.Linq.Expressions.Expression<Func<TOuter, TInner, TResult>>

Eine Funktion zum Erstellen eines Ergebniselements aus zwei übereinstimmenden Elementen.

Rückgabewert

Type: System.Linq.IQueryable<TResult>

Ein IQueryable<T> bei dem Elemente des Typs TResult durch Ausführen eines inner Joins von zwei Sequenzen ermittelt.

Typparameter

TOuter

Der Typ der Elemente der ersten Sequenz.

TInner

Der Typ der Elemente der zweiten Sequenz.

TKey

Der Typ der von den Schlüsselauswahlfunktionen zurückgegebenen Schlüssel.

TResult

Der Typ der Ergebniselemente.

Exception Condition
ArgumentNullException

outer oder inner oder outerKeySelector oder innerKeySelector oder resultSelector ist null.

Diese Methode verfügt über mindestens einen Parameter vom Typ Expression<TDelegate> deren Typargument ist eines der Func<T, TResult> Typen. Für diese Parameter können Sie einen Lambda-Ausdruck übergeben, und es werden kompiliert, um eine Expression<TDelegate>.

Die Join<TOuter, TInner, TKey, TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter, TKey>>, Expression<Func<TInner, TKey>>, Expression<Func<TOuter, TInner, TResult>>) -Methode generiert eine MethodCallExpression Aufruf darstellt Join<TOuter, TInner, TKey, TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter, TKey>>, Expression<Func<TInner, TKey>>, Expression<Func<TOuter, TInner, TResult>>) sich selbst als konstruierte generische Methode. Anschließend übergibt der MethodCallExpression zu der CreateQuery<TElement>(Expression) Methode der IQueryProvider durch dargestellt die Provider Eigenschaft der outer Parameter.

Das Abfrageverhalten durch das Ausführen einer Ausdrucksbaumstruktur, die aufrufende darstellt, Join<TOuter, TInner, TKey, TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter, TKey>>, Expression<Func<TInner, TKey>>, Expression<Func<TOuter, TInner, TResult>>) hängt von der Implementierung des Typs der outer Parameter. Das erwartete Verhalten ist, die einen inneren Join. Die outerKeySelector und innerKeySelector Funktionen dienen zum Extrahieren der Schlüssel von outer und inner, bzw.. Diese Schlüssel werden entsprechend der Elemente aus jeder Sequenz Gleichheit. Für jedes Element in ein Paar von Elementen gespeichert inner entspricht einem Element im outer. Die resultSelector -Funktion aufgerufen, um ein Ergebnisobjekt aus jedem Paar übereinstimmender Elemente zu projizieren.

Im folgenden Codebeispiel wird veranschaulicht, wie Sie Join<TOuter, TInner, TKey, TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter, TKey>>, Expression<Func<TInner, TKey>>, Expression<Func<TOuter, TInner, TResult>>) eine innere Verknüpfung zweier Sequenzen basierend auf einem gemeinsamen Schlüssel ausführen.

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
*/

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 3.5
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.1
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: