(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

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

Korreliert die Elemente von zwei Sequenzen auf der Grundlage von ü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
)

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.

Parameter

outer
Typ: System.Linq.IQueryable<TOuter>
Die erste zu verknüpfende Sequenz.
inner
Typ: System.Collections.Generic.IEnumerable<TInner>
Die Sequenz, die mit der ersten Sequenz verknüpft werden soll.
outerKeySelector
Typ: System.Linq.Expressions.Expression<Func<TOuter, TKey>>
Eine Funktion zum Extrahieren des Joinschlüssels aus jedem Element der ersten Sequenz.
innerKeySelector
Typ: System.Linq.Expressions.Expression<Func<TInner, TKey>>
Eine Funktion zum Extrahieren des Joinschlüssels aus jedem Element der zweiten Sequenz.
resultSelector
Typ: System.Linq.Expressions.Expression<Func<TOuter, TInner, TResult>>
Eine Funktion zum Erstellen eines Ergebniselements aus zwei übereinstimmenden Elementen.

Rückgabewert

Typ: System.Linq.IQueryable<TResult>
Ein IQueryable<T>, für das Elemente vom Typ TResult durch Ausführen eines inneren Joins von zwei Sequenzen ermittelt werden.

Hinweis zur Verwendung

In Visual Basic und C# können Sie diese Methode als Instanzenmethode für ein beliebiges Objekt vom Typ IQueryable<TOuter> aufrufen. Bei Verwendung der Syntax für Instanzenmethoden lassen Sie den ersten Parameter aus. Weitere Informationen finden Sie unter Erweiterungsmethoden (Visual Basic) und Erweiterungsmethoden (C#-Programmierhandbuch).

AusnahmeBedingung
ArgumentNullException

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

Diese Methode verfügt über mindestens einen Parameter vom Typ Expression<TDelegate>, dessen Typargument einer der Func<T, TResult>-Typen ist. Für diese Parameter können Sie einen Lambda-Ausdruck übergeben, und dieser wird zu einer Expression<TDelegate> kompiliert.

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 einen MethodCallExpression, der den Aufruf von Join<TOuter, TInner, TKey, TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter, TKey>>, Expression<Func<TInner, TKey>>, Expression<Func<TOuter, TInner, TResult>>) durch sich selbst als konstruierte generische Methode darstellt. Anschließend übergibt sie die MethodCallExpression an die CreateQuery<TElement>(Expression)-Methode des IQueryProvider, der von der Provider-Eigenschaft des outer-Parameters dargestellt wird.

Das Abfrageverhalten, das durch das Ausführen einer Ausdrucksbaumstruktur auftritt, die einen Aufruf von Join<TOuter, TInner, TKey, TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter, TKey>>, Expression<Func<TInner, TKey>>, Expression<Func<TOuter, TInner, TResult>>) darstellt, hängt von der Implementierung des Typs des outer-Parameters ab. Das erwartete Verhalten ist das eines inneren Joins. Mithilfe der outerKeySelector-Funktion und der innerKeySelector-Funktion werden Schlüssel aus outer bzw. inner extrahiert. Diese Schlüssel werden auf Gleichheit überprüft, um Elemente aus jeder Sequenz zu vergleichen. Für jedes Element in inner, das mit einem Element in outer übereinstimmt, wird ein Paar von Elementen gespeichert. Anschließend wird die resultSelector-Funktion aufgerufen, um ein Ergebnisobjekt aus jedem Paar übereinstimmender Elemente zu projizieren.

Im folgenden Codebeispiel wird veranschaulicht, wie mithilfe von Join<TOuter, TInner, TKey, TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter, TKey>>, Expression<Func<TInner, TKey>>, Expression<Func<TOuter, TInner, TResult>>) einen innere Join zweier Sequenzen anhand eines gemeinsamen Schlüssels ausgeführt wird.


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



.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft