/// Return InvoicePath Composed Function public static Func <Order, Freight> InvoicePathFunc(ProcessConfiguration c, InvoicingPath fpl) { Func <Order, Freight> p = fpl.InvoiceFunctions.Where((x) => x.InvoiceChoose == c.invoiceChoice).Select((x) => x.CalcInvoice).FirstOrDefault() .Compose(fpl.ShippingFunctions.Where((x) => x.ShippingChoose == c.shippingChoice).Select((x) => x.calcShipping).FirstOrDefault()) .Compose(fpl.frieghtFunctions.Where((x) => x.freightChoose == c.freightChoice).Select((x) => x.calcFrieght).FirstOrDefault()); return(p); }
public static void Main(string[] args) { InvoicingPath InvoicePath = new InvoicingPath(); AvailabilityPath AvailabilityPath = new AvailabilityPath(); (Order order, ProcessConfiguration processConfiguration) = setConfiguration(); Func <Order, Double> CostOfOrder = CalcAdjustedCostofOrder(processConfiguration, InvoicePath, AvailabilityPath); Console.WriteLine(CostOfOrder(order)); Console.ReadLine(); }
//Adjusted Cost for Order public static Func <Order, double> CalcAdjustedCostofOrder(ProcessConfiguration c, InvoicingPath InvoicePath, AvailabilityPath AvailabilityPath) { return((x) => AdjustCost(x, InvoicePathFunc(c, InvoicePath), AvailabilityPathFunc(c, AvailabilityPath))); }