Udostępnij za pośrednictwem


Jak: wykonywać lewym sprzężenia zewnętrzne (Podręcznik programowania C#)

Lewe sprzężenie zewnętrzne jest łączyć w która każdy element pierwsza kolekcja jest zwracana, bez względu na to, czy ma żadnych elementów skorelowane w drugiej kolekcji.Można użyć LINQ do wykonywania lewe sprzężenie zewnętrzne, wywołując DefaultIfEmpty metody na wyniki łączyć grupy.

Przykład

Poniższy przykład ilustruje sposób używania DefaultIfEmpty metody na wyniki łączyć grupy do wykonywania lewe sprzężenie zewnętrzne.

Pierwszym krokiem w tworzeniu lewe sprzężenie zewnętrzne dwóch zbiorów jest przeprowadzenie sprzężenia wewnętrznego za pomocą sprzężenia grupy.(Zobacz Jak: wykonywanie sprzężenia wewnętrzne (C# Programming Guide) o wyjaśnienie tego procesu.) W tym przykładzie wykaz Person obiektów jest wewnętrzna dołączył do listy Pet na podstawie obiektów Person obiekt, który pasuje do Pet.Owner.

Drugim krokiem jest uwzględnienie każdego elementu w kolekcji pierwszej (lewej) w zestawie wyników, nawet jeśli element ten posiada Brak pasujących elementów w kolekcji prawym.Można to osiągnąć przez wywołanie DefaultIfEmpty na każdej sekwencji pasujących elementów z sprzężenia grupy.W tym przykładzie DefaultIfEmpty nazywa się na każdej sekwencji pasujących Pet obiektów.Metoda zwraca kolekcja, która zawiera pojedynczą, wartość domyślna, jeśli sekwencja pasujących Pet obiektów jest pusta dla każdego Person obiektu, zapewniając że każdy Person obiektu jest reprezentowany w zbiorze wyników.

[!UWAGA]

Wartością domyślną dla typu odwołania jest null; w związku z tym, w przykładzie sprawdzana dla odwołanie o wartości null, przed uzyskaniem dostępu do każdego elementu Pet kolekcji.

        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:

Kompilowanie kodu

  • Utwórz nowy projekt aplikacji konsoli w Visual Studio.

  • Dodaj odwołanie do System.Core.dll, jeśli nie jest wywoływany.

  • Obejmują System.Linq obszaru nazw.

  • Skopiować i wkleić kod z przykładu do pliku program.cs poniżej Main metodę w Program klasy.Dodawanie linii kodu, aby Main metodę wywoływaną w LeftOuterJoinExample metoda.

  • Uruchom program.

Zobacz też

Zadania

Jak: wykonywanie sprzężenia wewnętrzne (C# Programming Guide)

Jak: wykonywanie zgrupowane sprzężenia (C# Programming Guide)

Informacje

Join

GroupJoin

Typy anonimowe (Podręcznik programowania C#)

Koncepcje

Operacje JOIN

Typy anonimowe (Visual Basic)