How to: Executar esquerda junções externas (guia de programação de C#)

Uma associação externa esquerda é uma associação na qual cada elemento da primeira coleção é retornado, independentemente de ele ter quaisquer elementos correlacionados na segunda coleção. Você pode usar LINQ para executar uma associação externa esquerda chamando DefaultIfEmpty nos resultados de uma associação de grupo.

Exemplo

O exemplo a seguir demonstra como usar o DefaultIfEmpty método nos resultados de uma associação de grupo para executar uma associação externa esquerda.

A primeira etapa na produção de uma junção externa esquerda das duas coleções é realizar uma junção interna por meio de uma associação de grupo. (Consulte How to: Realizar associações de interno (guia de programação C#) para obter uma explicação do processo.) Neste exemplo, a lista de Person objects é interno associado à lista de Pet objetos com base em um Person correspondentes do objeto Pet.Owner.

A segunda etapa é incluir cada elemento da coleção primeira (esquerda) no conjunto de resultados, mesmo se esse elemento não tem nenhuma correspondência na coleção à direita. Isso é feito chamando DefaultIfEmpty em cada seqüência de elementos correspondentes da associação de grupo. Neste exemplo, DefaultIfEmpty é chamado em cada seqüência de correspondentes Pet objetos. Retorna uma coleção que contém um valor de padrão único, se a seqüência de correspondentes Pet objetos está vazia para qualquer Person o objeto, garantindo que cada Person objeto é representado no conjunto de resultado.

ObservaçãoObservação

O valor padrão para um tipo de referência é null; Portanto, o exemplo verifica uma referência nula antes de acessar cada elemento de cada Pet coleção.

        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:

Compilando o código

  • Crie um novo projeto de aplicativo de Console em Visual Studio.

  • Adicione uma referência a System.Core.dll se já não é referenciado.

  • Incluir o System.Linq namespace.

  • Copie e cole o código do exemplo no arquivo Program. cs, abaixo de Main método. Adicionar uma linha de código para o Main método para chamar o método que você colou pol.

  • Execute o programa.

Consulte também

Tarefas

How to: Realizar associações de interno (guia de programação C#)

How to: Realizar associações agrupadas (guia de programação C#)

Referência

Join

GroupJoin

Tipos anônimos (guia de programação de C#)

Conceitos

Operações JOIN

Tipos anônimos (Visual Basic)