using System.Collections.Generic;
public static void Main()
var customers = new List<Customer>()
Id = Guid.NewGuid().ToString(),
Id = Guid.NewGuid().ToString(),
var purchases = new List<Purchase>()
Id = Guid.NewGuid().ToString(),
CustomerId = customers[0].Id,
Description = "Customer1-Purchase1"
Id = Guid.NewGuid().ToString(),
CustomerId = customers[0].Id,
Description = "Customer1-Purchase2"
Id = Guid.NewGuid().ToString(),
CustomerId = customers[1].Id,
Description = "Customer2-Purchase1"
Id = Guid.NewGuid().ToString(),
CustomerId = customers[1].Id,
Description = "Customer2-Purchase2"
var purchaseItems = new List<PurchaseItem>()
Id = Guid.NewGuid().ToString(),
PurchaseId= purchases[0].Id,
Detail = "Purchase1-PurchaseItem1"
Id = Guid.NewGuid().ToString(),
PurchaseId= purchases[1].Id,
Detail = "Purchase2-PurchaseItem1"
Id = Guid.NewGuid().ToString(),
PurchaseId= purchases[1].Id,
Detail = "Purchase2-PurchaseItem2"
Id = Guid.NewGuid().ToString(),
PurchaseId= purchases[3].Id,
Detail = "Purchase3-PurchaseItem1"
var result = from c in customers
join p in purchases on c.Id equals p.CustomerId
join pi in purchaseItems on p.Id equals pi.PurchaseId
c.Name, p.Description, pi.Detail
Console.WriteLine("Result");
foreach(var resultItem in result)
Console.WriteLine($"{resultItem.Name}, {resultItem.Description}, {resultItem.Detail}");
public string Id { get; set; }
public string Name {get; set; }
public string Id { get; set; }
public string CustomerId {get; set; }
public string Description { get; set; }
public class PurchaseItem
public string Id { get; set; }
public string PurchaseId {get; set; }
public string Detail { get; set; }