Freigeben über


Gewusst wie: Ausführen linker äußerer Verknüpfungen (C#-Programmierhandbuch)

Ein linker äußerer Join ist ein Join, in dem jedes Element aus der ersten Auflistung zurückgegeben wird, unabhängig davon, ob korrelierte Elemente in der zweiten Auflistung dafür zur Verfügung stehen. Sie können LINQ verwenden, um einen linken äußeren Join ausführen, indem Sie die DefaultIfEmpty``1-Methode für die Ergebnisse eines Group Joins aufrufen.

Beispiel

Das folgende Beispiel veranschaulicht, wie die DefaultIfEmpty``1-Methode auf die Ergebnisse des Group Joins angewendet wird, um einen linken äußeren Join auszuführen.

Der erste Schritt beim Erstellen eines linken äußeren Joins zweier Auflistungen besteht darin, einen inneren Join mithilfe eines Group Joins auszuführen. (Eine Erläuterung dieses Vorgangs finden Sie unter Gewusst wie: Ausführen innerer Verknüpfungen (C#-Programmierhandbuch).) In diesem Beispiel ist die Liste der Person-Objekten zur Liste der Pet-Objekte auf Grundlage eines Person-Objekt die mit Pet.Owner einen.

Als Nächstes muss jedes Element der ersten (linken) Auflistung in den Ergebnissatz eingeschlossen werden, selbst wenn dieses Element keine Entsprechung in der rechten Auflistung hat. Dazu rufen Sie DefaultIfEmpty``1 für jede Sequenz von übereinstimmenden Elementen aus dem Group Join auf. In diesem Beispiel wird DefaultIfEmpty``1 um jeder Sequenz für passende Pet-Objekten aufgerufen. Die - Methode eine Auflistung, die einen einzelnen Standardwert enthält, zurückgibt, wenn die Sequenz für passende Pet-Objekten für jedes beliebige Person-Objekt leer ist, somit wird sichergestellt, dass jedes Objekt Person in der Ergebnisauflistung dargestellt wird.

Hinweis

Der Standardwert für einen Referenztyp ist null; daher nach als ein NULL-Verweis, bevor auf jedes Element in jeder Pet-Auflistung zugegriffen wird.

        class Person
        {
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }

        class Pet
        {
            public string Name { get; set; }
            public Person Owner { get; set; }
        }

        public static void LeftOuterJoinExample()
        {
            Person magnus = new Person { FirstName = "Magnus", LastName = "Hedlund" };
            Person terry = new Person { FirstName = "Terry", LastName = "Adams" };
            Person charlotte = new Person { FirstName = "Charlotte", LastName = "Weiss" };
            Person arlene = new Person { FirstName = "Arlene", LastName = "Huff" };

            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 bluemoon = new Pet { Name = "Blue Moon", Owner = terry };
            Pet daisy = new Pet { Name = "Daisy", Owner = magnus };

            // Create two lists.
            List<Person> people = new List<Person> { magnus, terry, charlotte, arlene };
            List<Pet> pets = new List<Pet> { barley, boots, whiskers, bluemoon, daisy };

            var query = from person in people
                        join pet in pets on person equals pet.Owner into gj
                        from subpet in gj.DefaultIfEmpty()
                        select new { person.FirstName, PetName = (subpet == null ? String.Empty : subpet.Name) };

            foreach (var v in query)
            {
                Console.WriteLine("{0,-15}{1}", v.FirstName + ":", v.PetName);
            }
        }

        // This code produces the following output: 
        // 
        // Magnus:         Daisy 
        // Terry:          Barley 
        // Terry:          Boots 
        // Terry:          Blue Moon 
        // Charlotte:      Whiskers 
        // Arlene:

Kompilieren des Codes

  • Erstellen Sie ein neues Konsolenanwendungsprojekt in Visual Studio.

  • Fügen Sie einen Verweis auf System.Core.dll hinzu, wenn er noch nicht vorhanden ist.

  • Schließen Sie den System.Linq-Namespace ein.

  • Kopieren Sie den Code aus dem Beispiel in die program.cs-Datei, unter der Main-Methode in der Klasse Program. Fügen Sie eine Codezeile der Main-Methode hinzu, die LeftOuterJoinExample-Methode aufzurufen.

  • Führen Sie das Programm aus.

Siehe auch

Aufgaben

Gewusst wie: Ausführen innerer Verknüpfungen (C#-Programmierhandbuch)

Gewusst wie: Ausführen von Gruppenverknüpfungen (C#-Programmierhandbuch)

Referenz

Join

GroupJoin

Anonyme Typen (C#-Programmierhandbuch)

Konzepte

Verknüpfungsvorgänge

Anonyme Typen (Visual Basic)