var topTwoCustomers =
  (from c in customers
   join o in (
        from c in customers
          from o in c.Orders
          join p in products
               on o.IdProduct equals p.IdProduct
          select new { c.Name, OrderAmount = o.Quantity * p.Price }
        ) on c.Name equals o.Name
        into customersWithOrders
   let TotalAmount = customersWithOrders.Sum(o => o.OrderAmount)
   orderby TotalAmount descending
   select new { c.Name, TotalAmount }
  ).Take(2);
