using System.Collections.Generic;
public static void Main()
var items = new List<Item> ();
var people = new List<Person> ();
var countries = new List<Country> ();
var continents = new List<Continent> ();
var brands = new List<Brand> ();
.Join (people, src => src.OwnerId, p => p.PersonId, (src, p) => new JoinHelper { Item = src, Person = p } )
.Join (brands, src => src.Item.BrandId, b => b.BrandId, (src, b) => new JoinHelper { Item = src.Item, Person = src.Person, Brand = b })
.Join (countries, src => src.Person.CountryId, c => c.CountryId, (src, c) => new JoinHelper { Item = src.Item, Person = src.Person, Brand = src.Brand, Country = c } )
.Select (x => new { x.Item.ItemName, x.Person.PersonName, x.Brand.BrandName, x.Country.CountryName });
public Item Item { get; set; }
public Brand Brand { get; set; }
public Person Person { get; set; }
public Country Country { get; set; }
public Continent Continent { get; set; }
public string ItemName { get; set; }
public int OwnerId { get; set; }
public int BrandId { get; set; }
public int BrandId { get; set; }
public string BrandName { get; set; }
public int PersonId { get; set; }
public string PersonName { get; set; }
public int CountryId { get; set; }
public int CountryId { get; set; }
public int CountryName { get; set; }
public int ContinentId { get; set; }
public int ContinentId { get; set; }
public int ContinentName { get; set; }