public static Produt FetchProducts() { var products = new Produt { prouctItems = new List <ProdutItems>() { new ProdutItems() { productId = 1, productName = "P1", productCost = 1, productValue = 200 }, new ProdutItems() { productId = 2, productName = "P2", productCost = 2, productValue = 40 }, new ProdutItems() { productId = 3, productName = "P3", productCost = 3, productValue = 60 }, new ProdutItems() { productId = 4, productName = "P4", productCost = 4, productValue = 200 } } }; return(products); }
public static int GetMaxValue(int budget, Produt objProds) { int toatlValue = 0; int costSpent = 0; string productsList = ""; string productNames = ""; //var objProds = new Produt(); int[] arrIds = objProds.prouctItems.Select(item => item.productId).ToArray(); /* * Calls the method to get the Subsets of an Array*/ List <string> arrListIds = GetSubStrings(arrIds); /* Iterates through the subset Ids in the Dataset and Calcualtes Max Value of Product - Starts */ Dictionary <string, int> dictProduct = new Dictionary <string, int>(); foreach (var str in arrListIds) { int totValue = 0; int totCost = 0; if (str != "") { List <string> lstIds = str.Split(',').ToList(); foreach (var prodId in lstIds) { var prodQuery = from Produt in objProds.prouctItems where Produt.productId == Convert.ToInt32(prodId) select Produt; var prodQueryMax = from Produt in objProds.prouctItems where Produt.productId == Convert.ToInt32(prodId) select Produt; foreach (var cols in prodQuery) { if ((totCost + cols.productCost) <= budget) { totValue = totValue + cols.productValue; totCost = totCost + cols.productCost; } } } } //Stores the Maximum Value for the different combination of ProductIds if (!dictProduct.ContainsValue(totValue)) { dictProduct.Add(str, totValue); } } /* Iterates through the subset Ids in the Dataset and Calcualtes Max Value - Ends */ //Sort the Dictionary in Descending Order and Fetches the Maximum Value Product Purchase var maxValue = dictProduct.OrderByDescending(i => i.Value).First(); toatlValue = maxValue.Value; productsList = maxValue.Key; /* Code to Display the Result: Product Name: Value: CostSpent - Starts */ if (productsList != "") { List <string> lstMaxValIds = productsList.Split(',').ToList(); foreach (var Id in lstMaxValIds) { var prodResultQuery = from Produt in objProds.prouctItems where Produt.productId == Convert.ToInt32(Id) select Produt; foreach (var cols in prodResultQuery) { if (productNames == "") { productNames = cols.productName; } else { productNames = productNames + "," + cols.productName; } costSpent = costSpent + cols.productCost; } } } Console.WriteLine("Maximum Value of product purchased: {0}", toatlValue); Console.WriteLine("Product purchased: {0}", productNames); Console.WriteLine("Cost Spent: {0}CHF", costSpent); /* Code to Display the Result: Product Name: Value: CostSpent - Ends */ return(toatlValue); }