Linq Sample to Join 3 Collections / Tables

void Main()
{
    var members = Members();
    var locations = Locations();
    var planets = Planets();
    var l = members
                .Join(locations,
                      mem => mem.mId,
                      loc => loc.mId,                      
                      (mem, loc) => new { loc, mem })
                 .Join(planets,
                       lm => lm.loc.mId,
                       pla => pla.mId,
                       (lm,pl) => new { pl.Name, lm.loc, lm.mem })   
                  .Select(s => new {
                     s.mem.FullName,
                     s.Name,
                     s.loc.Address                   
                  })
                  .ToList();                   
     l.Dump();
}

public List<Planet> Planets(){
  var x = new List<Planet>(){
     new Planet(){ mId = 1, Name = "Mercury" },
     new Planet(){ mId = 2, Name = "Venus" },
     new Planet(){ mId = 3, Name = "Earth" },
     new Planet(){ mId = 4, Name = "Mars" }
  };
  return x;
}

public List<Location> Locations(){
   var x = new List<Location>(){
      new Location(){ mId = 1, Address = "Busugon" },
      new Location(){ mId = 2, Address = "Tacup" },
      new Location(){ mId = 3, Address = "Kinawahan" },
      new Location(){ mId = 4, Address = "Victoria" },
   };
   return x;
}

public List<Member> Members(){
    var x = new List<Member>(){
       new Member(){ mId = 1, FullName = "Julius", Number = 1 },
       new Member(){ mId = 2, FullName = "Elvira", Number = 2 },
       new Member(){ mId = 3, FullName = "Roberto",  Number = 3 }      
    };
    return x;
}

public class Member {
    public int mId { get; set; }
    public string FullName { get; set; }
    public int Number { get; set; }
}

public class Location {
   public int mId { get; set; }
   public string Address { get;set; }
}

public class Planet {
   public int mId { get; set; }
   public string Name { get; set; }
}