static void Main(string[] args) { IServiceCollection services = new ServiceCollection(); // Startup.cs finally :) Startup startup = new Startup(); startup.ConfigureServices(services); IServiceProvider serviceProvider = services.BuildServiceProvider(); startup.GetConfigs(); dataRepository = serviceProvider.GetService <IDataServices>(); imapper = serviceProvider.GetService <IMapper>(); ///////////Task 1 DateTime startdate = new DateTime(2019, 10, 01); DateTime endDate = new DateTime(2019, 10, 31); List <RootViewModel> Rates = new List <RootViewModel>(); foreach (DateTime day in Helpers.EachDay(startdate, endDate)) { RootViewModel rate = imapper.Map <Root, RootViewModel>(dataRepository.GetRate(day, "EUR")); Rates.Add(rate); } /////////Task 2 Console.WriteLine("API Accessed"); List <ExcelEntity> DataMerge = new List <ExcelEntity>(); DataMerge.AddRange(dataRepository.GetData(ConfigurationHelper.BasePath + "\\Data\\data1.csv")); DataMerge.AddRange(dataRepository.GetData(ConfigurationHelper.BasePath + "\\Data\\data2.csv")); DataMerge.AddRange(dataRepository.GetData(ConfigurationHelper.BasePath + "\\Data\\data3.csv")); ////////Task 3 var DataRatesJoin = (from rates in Rates join data in DataMerge on rates.Date equals data.date into dm from subData in dm.DefaultIfEmpty() select new { Date = rates.Date, Country = subData.country, currency = subData.currency, amount = subData.amount, rate = rates.Rates[subData.currency] }).ToList(); ////////Task 4 var DataRatesAddEur = (from rates in DataRatesJoin select new { Date = rates.Date, Country = rates.Country, Currency = rates.currency, Amount = rates.amount, Rate = rates.rate, amount_eur = rates.amount * rates.rate }).ToList(); ////////Task 5 List <DataRates> DataRatesAddEur2 = DataRatesAddEur.Select(e => new DataRates { Date = e.Date, Country = e.Country, Currency = e.Currency, Amount = e.Amount, Rate = e.Rate, amount_eur = e.amount_eur, country_group = e.Country == "Austria" || e.Country == "Italy" || e.Country == "Belgium" || e.Country == "Latvia" ? "EUR" : e.Country == "Chile" || e.Country == "Qatar" || e.Country == "United Arab Emirates" || e.Country == "United States of America" ? "ROW" : e.Country == "United Kingdom" || e.Country == "Australia" || e.Country == "South Africa" ? e.Country : "N/A" }).ToList(); ////////Task 6 var result = DataRatesAddEur2.GroupBy(a => a.country_group) .Select(a => new CountryTotal { TotalAmount = a.Sum(b => b.amount_eur), Country = a.Key }) .OrderByDescending(a => a.TotalAmount) .ToList(); }