Sdílet prostřednictvím


Postupy: Provedení levých vnějších spojení (Průvodce programováním v C#)

Levé vnější spojení je spojení ve kterém každý prvek první kolekce je vrácena, bez ohledu na to, zda nemá žádné prvky korelovaného druhá kolekce.Můžete použít LINQ k provedení levé vnější spojení voláním DefaultIfEmpty``1 metoda na výsledky skupiny spojení.

Příklad

Následující příklad ukazuje, jak použít DefaultIfEmpty``1 metoda na výsledky skupiny spojení k provedení levé vnější spojení.

Prvním krokem při výrobě levé vnější spojení dvou kolekcí je provádět vnitřní spojení pomocí spojení skupiny.(Viz Postupy: Provádění vnitřních spojení (Průvodce programováním v C#) vysvětlení tohoto procesu.) V tomto příkladu seznam Person objektů je vnitřní připojen k seznamu Pet na základě objektů Person objekt, který odpovídá Pet.Owner.

Druhým krokem je zahrnout každý prvek kolekce první (levé) v sadě výsledků, i v případě, že tento prvek má žádné odpovídající položky v pravém kolekci.To lze provést voláním DefaultIfEmpty``1 na každou sérii odpovídající prvky ze skupiny spojení.V tomto příkladu DefaultIfEmpty``1 je volán na každou sérii odpovídající Pet objekty.Metoda vrátí kolekci, která obsahuje jediný, výchozí hodnota, pokud sekvence odpovídajících Pet objektů je prázdná pro všechny Person objektu, a tím zajistit, že každá Person objekt je reprezentován v kolekci výsledek.

[!POZNÁMKA]

Výchozí hodnota pro typ odkazu je null; proto v příkladu kontroluje hodnotu nulového odkazu před přístupem na 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.

  • Pokud již není odkazováno, přidejte odkaz na System.Core.dll.

  • Zahrnout System.Linq oboru názvů.

  • Zkopírujte a vložte kód z příkladu na soubor program.cs níže Main metoda Program třídy.Přidat řádek kódu, které Main metody k volání LeftOuterJoinExample metoda.

  • Spusťte program.

Viz také

Úkoly

Postupy: Provádění vnitřních spojení (Průvodce programováním v C#)

Postupy: Provádění seskupených spojení (Průvodce programováním v C#)

Referenční dokumentace

Join

GroupJoin

Anonymní typy (Průvodce programováním v C#)

Koncepty

Operace sjednocení

Anonymní typy (Visual Basic)