var result = new List(); string orderKey = ""; int orderKeyIndex = 1; foreach(var item in order) { result.Add(new FactOnlineSalesCsv { OrderKey = item.OrderKey, PaymentMethodKey = item.PaymentMethodKey, ProductKey = item.ProductKey, ChannelKey = item.ChannelKey, CustomerKey = item.CustomerKey, DeliveryMethodKey = item.DeliveryMethodKey, OrderDateKey = dimDateCsv.FirstOrDefault(t => t.FullDate == item.OrderDate).DateKey, ShipDateKey = dimDateCsv.FirstOrDefault(t => t.FullDate == item.DeliveryDate).DateKey, ProductCost = 0.0475 * (double)item.TransactionPrice, DeliveryCost = Math.Round(item.DeliveryCost / item.Quantity, 2), DiscountPctg = item.DiscountPctg, DiscountAmount = item.DiscountAmount, CatalogPrice = item.CatalogPrice, OrderLineNumber = orderKey == item.OrderKey ? orderKeyIndex + 1 : 1, Quantity = item.Quantity, SalesTerritoryKey = dimSalesTerritoryCsv.FirstOrDefault(t => t.CountryKey == item.CountryKey).SalesTerritoryKey, TransactionPrice = item.TransactionPrice }); if(orderKey == item.OrderKey) { orderKeyIndex += 1; } else { orderKeyIndex = 1; } orderKey = item.OrderKey;