static void Main(string[] args)
        {
            DataStore data = new DataStore();

            data.AddCategory(new Category(300, "Shoes"));
            data.AddCategory(new Category(301, "Pants"));
            data.AddCategory(new Category(302, "TShirt"));
            data.AddCategory(new Category(400, "Toys"));
            data.AddCategory(new Category(420, "Diamond"));
            data.AddCategory(new Category(430, "Gum"));
            data.AddCategory(new Category(500, "Books"));
            data.AddCategory(new Category(600, "Nuts"));
            data.AddCategory(new Category(700, "Vegetables"));

            data.AddProduct(new Product("Nike", 1, 300));
            data.AddProduct(new Product("Reebok", 2, 300));
            data.AddProduct(new Product("Long", 12, 301));
            data.AddProduct(new Product("Jeans", 22, 301));
            data.AddProduct(new Product("White", 32, 302));
            data.AddProduct(new Product("Green", 42, 302));
            data.AddProduct(new Product("Truck", 52, 400));
            data.AddProduct(new Product("Car", 62, 400));
            data.AddProduct(new Product("Queen", 64, 420));
            data.AddProduct(new Product("24k", 66, 420));
            data.AddProduct(new Product("Turbo", 72, 430));
            data.AddProduct(new Product("Orbit", 82, 430));
            data.AddProduct(new Product("Shadow", 96, 500));
            data.AddProduct(new Product("Sun", 100, 500));
            data.AddProduct(new Product("almons", 102, 600));
            data.AddProduct(new Product("pistachios", 123, 600));
            data.AddProduct(new Product("Tomatto", 125, 700));
            data.AddProduct(new Product("aubergine", 130, 700));

            data.AddOrder(new Order(
                              1, new List <int>()
            {
                1, 12, 22, 53, 72, 123
            }, DateTime.Now.AddDays(1).AddHours(2), "Order1"
                              ));
            data.AddOrder(new Order(
                              2, new List <int>()
            {
                82, 12, 125, 130, 72, 96
            }, DateTime.Now.AddDays(2).AddHours(1), "Order2"
                              ));
            data.AddOrder(new Order(
                              3, new List <int>()
            {
                32, 42, 52, 63
            }, DateTime.Now.AddDays(5).AddHours(-3), "Order3"
                              ));
            data.AddOrder(new Order(
                              4, new List <int>()
            {
                2, 52, 72, 123
            }, DateTime.Now.AddDays(6).AddHours(4), "Order4"
                              ));

            //All products with ids between 15 and 30
            var prod15_30 = from product in data.GetProducts()
                            where product.ProductId >= 15 && product.ProductId <= 30
                            select product;

            //All categories with ids between 105 and 125
            var categor105_125 = from category in data.GetCategories()
                                 where category.CategoryId >= 105 && category.CategoryId <= 125
                                 select category;

            //First 15 orders sorted by order name
            var sorted = from order in data.GetOrders()
                         orderby order.Name
                         select order;

            //First 3 orders which contains productId 5, sorted by order date
            var sortedProd = from order in data.GetOrders()
                             where order.Products.Contains(12)
                             orderby order.OrderDate
                             select order;

            foreach (var item in sortedProd)
            {
                Console.WriteLine($"Order ID:{item.OrderId}, Order Name:{item.Name}, Products:{string.Join(", ", item.Products)}, Date:{item.OrderDate} ");
            }


            //All product with the name of the category, which they belong to, order by CategoryName
            var prodCateg = from product in data.GetProducts()
                            join category in data.GetCategories()
                            on product.CategoryId equals category.CategoryId
                            select new { ProductName = product.Name, ProductCategory = category.CategoryName };

            Console.WriteLine();
            foreach (var product in prodCateg)
            {
                Console.WriteLine($"ProductName: {product.ProductName}, ProductCategory:{product.ProductCategory}");
            }

            //All categories together with their products
            Console.WriteLine();

            var categProd = from order in data.GetOrders()
                            let prodWithCateg = (from prodId in order.Products
                                                 join product in data.GetProducts()
                                                 on prodId equals product.ProductId
                                                 join category in data.GetCategories()
                                                 on product.CategoryId equals category.CategoryId
                                                 select new { ProductName = product.Name, CategoryName = category.CategoryName })
                                                orderby order.OrderDate
                                                select new
            {
                OrderId              = order.OrderId,
                OrderName            = order.Name,
                ProductsWithCategory = prodWithCateg,
                OrderDate            = order.OrderDate
            };

            Console.WriteLine();
            foreach (var order in categProd)
            {
                Console.WriteLine("OrderId: {0}", order.OrderId);
                Console.WriteLine("OrderName: {0}", order.OrderName);
                Console.WriteLine("Ordered Products:");
                Console.WriteLine("=======================");

                foreach (var product in order.ProductsWithCategory)
                {
                    Console.WriteLine("Product: {0} - {1}", product.ProductName, product.CategoryName);
                }
                Console.WriteLine("Order Date: {0}", order.OrderDate);
                Console.WriteLine();
            }
        }