LINQ GroupJoin Query Operator

By Peter Bromberg

Correlates the elements of two sequences based on key equality, and groups the results. This member is overloaded. For complete information about this member, including syntax, usage, and examples, check the overload list.

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

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

             public static void GroupJoinEx1()
            {
                Person magnus = new Person { Name = "Hedlund, Magnus" };
                Person terry = new Person { Name = "Adams, Terry" };
                Person charlotte = new Person { Name = "Weiss, Charlotte" };

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

               List<Person> people = new List<Person> { magnus, terry, charlotte };
               List<Pet> pets = new List<Pet> { barley, boots, whiskers, daisy };

                 // Create a list where each element is an anonymous
                 // type that contains a person's name and
                 // a collection of names of the pets they own.
                 var query =
                     people.GroupJoin(pets,
                                     person => person,
                                     pet => pet.Owner,
                                     (person, petCollection) =>
                                         new
                                         {
                                             OwnerName = person.Name,
                                             Pets = petCollection.Select(pet => pet.Name)
                                         });

                 foreach (var obj in query)
                 {
                     // Output the owner's name.
                   Console.WriteLine("{0}:", obj.OwnerName);
                     // Output each of the owner's pet's names.
                     foreach (string pet in obj.Pets)
                    {
                       Console.WriteLine("  {0}", pet);
                    }
                }
            }

            /*
             This code produces the following output:

             Hedlund, Magnus:
               Daisy
             Adams, Terry:
               Barley
               Boots
             Weiss, Charlotte:
               Whiskers
             */

LINQ GroupJoin Query Operator  (1082 Views)