public double RequestOrder(Order order)
        {
            foreach (KeyValuePair<int, int> requestedItem in order.OrderedItems)
            {
                bool found = false;
                foreach (Product product in products)
                {
                    if (product.Id == requestedItem.Key)
                    {
                        if (product.Quantity >= requestedItem.Value)
                        {
                            found = true;
                        }
                    }
                }

                if (!found) throw new NotAvailableInInventoryException("Some items are unavailable!");
            }

            double price = 0;
            foreach (var requestedItem in order.OrderedItems)
            {
                foreach (var product in products)
                {
                    if (product.Id == requestedItem.Key)
                    {
                        product.Quantity = product.Quantity - requestedItem.Value;
                        price += requestedItem.Value * product.AfterTaxPrice;
                    }
                }
            }

            return price;
        }
        public double RequestOrder(Order order)
        {
            double sum = 0;
            for(int i = 0; i < order.ProductIds.Count; i++)
            {
                bool success = false;

                //shorter version using LINQ:
                //var product = products.FirstOrDefault(p => p.Id == order.ProductIds[i]);
                Product product = null;
                foreach (var p in products)
                {
                    if (p.Id == order.ProductIds[i])
                    {
                        product = p;
                        break;
                    }
                }

                if(product != null && product.Quantity >= order.ProductQuantities[i])
                {
                    sum += product.SinglePriceWithTax * order.ProductQuantities[i];
                    success = true;
                }

                if(!success)
                {
                    throw new NotAvailableInInventoryException(order.ProductIds[i], order.ProductQuantities[i]);
                }
            }

            return sum;
        }
        static void Main(string[] args)
        {
            var inventory = GetInventory();

            Console.WriteLine(string.Format("Audit: {0}", inventory.Audit()));

            var order = new Order(
                new int[] { 1, 3, 5 },
                new int[] { 5, 7, 100 }
                );

            Console.WriteLine(string.Format("RequestOrder: {0}", inventory.RequestOrder(order)));

            Console.ReadKey();
        }