Using extension syntax I’m trying to create a left-join using LINQ on two lists that I have. The following is from the Microsoft help but I’ve modified it to show that the pets list has no elements. What I’m ending up with is a list of 0 elements. I assume that this is because an inner-join is taking place. What I want to end up with is a list of 3 elements (the 3 Person objects) with null data filled in for the missing elements. i.e. a Left-Join. Is this possible?
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 }; List<Pet> pets = new List<Pet>(); // Create a list of Person-Pet pairs where // each element is an anonymous type that contains a // Pet's name and the name of the Person that owns the Pet. var query = people.Join(pets, person => person, pet => pet.Owner, (person, pet) => new { OwnerName = person.Name, Pet = pet.Name }).ToList();
I think if you want to use extension methods you need to use the GroupJoin
You may have to play around with the selection expression. I’m not sure it would give you want you want in the case where you have a 1-to-many relationship.
I think it’s a little easier with the LINQ Query syntax