using System.Collections.Generic;
using System.Data.SqlClient;
public class PricingBrochure
public string BrochureName { get; set; }
public DateTime ApplicableFrom { get; set; }
public int YearOffset { get; set; }
public PricingBrochure(string brochure, DateTime dateFrom, int offset)
this.BrochureName = brochure;
this.ApplicableFrom = dateFrom;
this.YearOffset = offset;
public List<PricingBrochure> GenerateTestBrochures()
List<PricingBrochure> retVal = new List<PricingBrochure>();
retVal.Add(new PricingBrochure("January 2020", new DateTime(2020, 01, 01), 200));
retVal.Add(new PricingBrochure("July 2020", new DateTime(2020, 07, 01), 210));
retVal.Add(new PricingBrochure("January 2021", new DateTime(2021, 01, 01), 220));
retVal.Add(new PricingBrochure("July 2021", new DateTime(2021, 07, 01), 230));
retVal.Add(new PricingBrochure("January 2022", new DateTime(2022, 01, 01), 240));
retVal.Add(new PricingBrochure("July 2022", new DateTime(2022, 07, 01), 250));
public string OrderID { get; set; }
public DateTime SoldDate { get; set; }
public string Surname {get; set; }
public Order(string orderID, DateTime soldDate, string Surname)
this.SoldDate = soldDate;
public Order TransitionFromCRMtoPM(PricingBrochure pb)
return new Order(OrderID.ToString() + "T", SoldDate.AddYears(pb.YearOffset), "TestSurname");
public List<Order> GenerateTestOrders(int quantity)
List<Order> retVal = new List<Order>();
Random rand = new Random();
for (int i = 0; i < quantity; i++)
retVal.Add(new Order(rand.Next(1000000, 1999999).ToString(), DateTime.Now.AddDays(-1 * rand.Next(1, 730)), "TestSurname"));
public static void Main()
PricingBrochure pb = new PricingBrochure();
var pbList = pb.GenerateTestBrochures().OrderBy(x => x.ApplicableFrom);
var oList = o.GenerateTestOrders(100000);
var newOrders = oList.AsParallel()
.Select(o => (Order: o, Brochure: pbList.Last(x => MatchingBrochure(x, o))))
.Select(x => (OldOrder: x.Order, NewOrder: x.Order.TransitionFromCRMtoPM(x.Brochure), Brochure: x.Brochure))
newOrders.ForEach(x => Console.WriteLine(x.OldOrder.OrderID.ToString() + " | " + x.OldOrder.SoldDate.ToString("dd/MM/yyyy") + " | " + x.NewOrder.OrderID + " | " + x.NewOrder.SoldDate + " | " + x.Brochure.BrochureName + " | " + x.NewOrder.Surname));
Console.WriteLine("Completed");
public static bool MatchingBrochure(PricingBrochure pb, Order o)
return pb.ApplicableFrom <= o.SoldDate;