static void Main() { var goods = SequenceReader.GetPurchases(10); var customers = SequenceReader.GetCustomers(10); var orders = SequenceReader.GetProductsFrom(10); foreach (var item in goods) { Console.WriteLine(item); } Console.WriteLine(); foreach (var item in customers) { Console.WriteLine(item); } Console.WriteLine(); foreach (var item in orders) { Console.WriteLine(item); } Console.WriteLine(); var result = goods.Join(customers, x => x.Code, x => x.Code, (x, y) => new { x.VendorCode, y.Street }).Join(orders, x => x.VendorCode, x => x.VendorCode, (x, y) => new { x.Street, y.Category, }) .GroupBy(x => new { x.Street, x.Category }) .Select(x => new { x.Key.Street, x.Key.Category, Count = x.Count() }) .OrderBy(x => x.Street) .ThenBy(x => x.Category); foreach (var item in result) { Console.WriteLine($"{item.Street} {item.Category} {item.Count}"); } Console.WriteLine(); }