Sdílet prostřednictvím


Jak: provedení levé vnější spojení (Příručka programování C#)

Levé vnější spojení je spojení v níž každý prvek kolekce první vrácen, bez ohledu na to, zda nemá žádné prvky wolframovým druhá kolekce.Můžete použít LINQ levé vnější spojení provést voláním DefaultIfEmpty na výsledky skupiny spojení.

Příklad

Následující příklad demonstruje použití DefaultIfEmpty metodu na výsledky skupiny spojení provádět levé vnější spojení.

Prvním krokem při výrobě levé vnější spojení dvou kolekcí je provádění vnitřního spojení pomocí skupiny spojení.(Viz Jak: provádět vnitřní spojení (C# Příručka programování) vysvětlení tohoto procesu.) V tomto příkladu seznam Person objektů je vnitřní připojen k seznamu Pet objekty na základě Person objekt odpovídající Pet.Owner.

Druhým krokem je zahrnout každý prvek kolekce první (levé) v sadě výsledků, i když tento prvek má žádné odpovídající položky v pravém kolekci.To lze provést voláním DefaultIfEmpty na každé sekvenci odpovídající prvky ze skupiny spojení.V tomto příkladu DefaultIfEmpty je uplatňována na každé sekvenci odpovídající Pet objektů.Vrátí kolekci, která obsahuje jediný, výchozí hodnota, pokud odpovídající sekvenci Pet je prázdná pro všechny objekty Person objekt, čímž se zajistí to každý Person objektu je reprezentován v kolekci výsledek.

[!POZNÁMKA]

Výchozí hodnota pro typ odkazu je null; proto v příkladu kontroluje hodnotu null referenční před přístupem každý prvek každého Pet kolekce.

        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:

Probíhá kompilace kódu

  • Vytvořit nový projekt aplikace konzoly v Visual Studio.

  • Přidáte odkaz na System.Core.dll, pokud není odkaz.

  • Zahrnout System.Linq oboru názvů.

  • Zkopírujte a vložte kód z příkladu do souboru program.cs níže Main metoda.Přidání řádku kódu Main volat metodu vložené do metody.

  • Spusťte program.

Viz také

Úkoly

Jak: provádět vnitřní spojení (C# Příručka programování)

Jak: provedení skupinových spojení (C# Příručka programování)

Referenční dokumentace

Join

GroupJoin

Anonymní typy (Příručka programování C#)

Koncepty

Operace JOIN

Anonymní typy (Visual Basic)