using System.Collections.Generic;
public static void Main(string[] args)
List<Customer> customers = new List<Customer>()
new Customer(){ID = Guid.NewGuid(), Age = 23, First = "Joe", Last = "Smith"},
new Customer(){ID = Guid.NewGuid(), Age = 34, First = "Kevin", Last = "Costner"},
new Customer(){ID = Guid.NewGuid(), Age = 23, First = "Sally", Last = "Smuthers"},
new Customer(){ID = Guid.NewGuid(), Age = 56, First = "Mary", Last = "Jane"},
new Customer(){ID = Guid.NewGuid(), Age = 48, First = "Jane", Last = "Kendall"},
new Customer(){ID = Guid.NewGuid(), Age = 34, First = "Eve", Last = "Shrimp"},
new Customer(){ID = Guid.NewGuid(), Age = 31, First = "Donna", Last = "Lynn"},
new Customer(){ID = Guid.NewGuid(), Age = 21, First = "Sarah", Last = "Spicer"},
List<Order> orders = new List<Order>()
new Order() {CustomerID = customers[0].ID, Description="Shoes", Price=150.23M, Quantity=1},
new Order() {CustomerID = customers[0].ID, Description="Phone", Price=130.25M, Quantity=1},
new Order() {CustomerID = customers[0].ID, Description="Jacket", Price=230.14M, Quantity=1},
new Order() {CustomerID = customers[1].ID, Description="Phone", Price=130.25M, Quantity=1},
new Order() {CustomerID = customers[1].ID, Description="Jacket", Price=230.14M, Quantity=1},
new Order() {CustomerID = customers[1].ID, Description="Pants", Price=70.56M, Quantity=1},
new Order() {CustomerID = customers[2].ID, Description="Jacket", Price=230.14M, Quantity=1},
new Order() {CustomerID = customers[2].ID, Description="Pants", Price=70.56M, Quantity=1},
new Order() {CustomerID = customers[2].ID, Description="Shirt", Price=49.99M, Quantity=1},
new Order() {CustomerID = customers[3].ID, Description="Pants", Price=70.56M, Quantity=1},
new Order() {CustomerID = customers[3].ID, Description="Shirt", Price=49.99M, Quantity=1},
new Order() {CustomerID = customers[3].ID, Description="Scarf", Price=23.69M, Quantity=1},
new Order() {CustomerID = customers[4].ID, Description="Shirt", Price=49.99M, Quantity=1},
new Order() {CustomerID = customers[4].ID, Description="Scarf", Price=23.69M, Quantity=1},
new Order() {CustomerID = customers[4].ID, Description="Car", Price=24200.15M, Quantity=1},
new Order() {CustomerID = customers[5].ID, Description="Scarf", Price=23.69M, Quantity=1},
new Order() {CustomerID = customers[5].ID, Description="Car", Price=24200.15M, Quantity=1},
new Order() {CustomerID = customers[5].ID, Description="Computer", Price=650.00M, Quantity=1},
new Order() {CustomerID = customers[6].ID, Description="Car", Price=24200.15M, Quantity=1},
new Order() {CustomerID = customers[6].ID, Description="Computer", Price=650.00M, Quantity=1},
new Order() {CustomerID = customers[6].ID, Description="Shoes", Price=150.23M, Quantity=1},
new Order() {CustomerID = customers[7].ID, Description="Computer", Price=650.00M, Quantity=1},
new Order() {CustomerID = customers[7].ID, Description="Jacket", Price=230.14M, Quantity=1},
new Order() {CustomerID = customers[7].ID, Description="Pants", Price=70.56M, Quantity=1},
var CustOrders = customers.GroupJoin(orders, c => c.ID, o => o.CustomerID, (c, result) =>new Result(c.First,c.Last,c.Age,result));
var CustorderByLastName = CustOrders.OrderBy(c => c.LastName);
Console.WriteLine("========1========");
Console.WriteLine("Customers and orders sorted by last name:");
foreach (var item in CustorderByLastName)
Console.WriteLine("\n"+item.FirstName +" "+ item.LastName);
Console.WriteLine("\nOrders:");
foreach (var itemorders in item.Orders.OrderByDescending(o=>o.Price))
Console.WriteLine(itemorders.Description + " Price :" + itemorders.Price + " Quantity: " + itemorders.Quantity);
var TotalNumberOfOrders = orders.Count();
Console.WriteLine("\nTotal number of orders:{0}",TotalNumberOfOrders);
var NumberOfOrderUnder = orders.Where(o => o.Price < 500).Count();
Console.WriteLine("Number of orders $500 or under: {0} ",NumberOfOrderUnder);
var NumberOfOrderOver = orders.Where(o => o.Price > 500).Count();
Console.WriteLine("Number of orders $500 or over: {0} ",NumberOfOrderOver);
var SumAllOrders = orders.Sum(o => o.Price);
Console.WriteLine("\nTotal cost for all orders: {0} ",SumAllOrders);
var SumAllOrdersFilterOnAgeUnder = CustOrders.Where(c=>c.Age < 30).Sum(c=>c.Orders.Sum(a=>a.Price));
Console.WriteLine("\nTotal cost for all orders for people under 30: {0} ",SumAllOrdersFilterOnAgeUnder);
var SumAllOrdersFilterOnAgeOver = CustOrders.Where(c => c.Age > 30).Sum(c => c.Orders.Sum(a => a.Price));
Console.WriteLine("\nTotal cost for all orders for people over 30: {0} ",SumAllOrdersFilterOnAgeOver);
var min3OrderPrice = orders.OrderBy(o=>o.Price).Select((c)=>new {desc=c.Description,c.Price}).Distinct().Take(3);
Console.WriteLine("\nThe 3 least expensive products:");
foreach (var item in min3OrderPrice)
Console.WriteLine(item.desc +" "+item.Price);
var max3OrderPrice = orders.OrderByDescending(o => o.Price).Select((c) => new { desc = c.Description, c.Price }).Distinct().Take(3);
Console.WriteLine("\nThe 3 most expensive products:");
foreach (var item in max3OrderPrice)
Console.WriteLine(item.desc + " " + item.Price);
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public IEnumerable<Order> Orders { get; set; }
public Result(string FirstName, string LastName, int Age, IEnumerable<Order> Orders)
this.FirstName = FirstName;
this.LastName = LastName;
public int Age { get; internal set; }
public string First { get; internal set; }
public Guid ID { get; internal set; }
public string Last { get; internal set; }
public Guid CustomerID { get; internal set; }
public string Description { get; internal set; }
public decimal Price { get; internal set; }
public int Quantity { get; internal set; }