//Parsing XML data to object (type Rates) public IEnumerable <Rates> ParsingData(bool latest) { DataFile DataXml = new DataFile(); Rates DataRates; IEnumerable <Rates> ListDataRates = Enumerable.Empty <Rates>();; if (latest == true) { DataXml = DataXml.XmlToDataFile(); } else { DataXml = DataXml.XmlToDataFileHistory(); } for (int j = 0; j < DataXml.CubeRootEl.Count(); j++) { var time = DataXml.CubeRootEl.ElementAtOrDefault(j).Time; IEnumerable <Rates.Currency> currencies = Enumerable.Empty <Rates.Currency>(); for (int i = 0; i < DataXml.CubeRootEl.ElementAtOrDefault(j).CubeItems.Count(); i++) { Rates.Currency currency = new Rates.Currency(); currency.Name = DataXml.CubeRootEl.ElementAtOrDefault(j).CubeItems.ElementAtOrDefault(i).Currency; currency.Rate = DataXml.CubeRootEl.ElementAtOrDefault(j).CubeItems.ElementAtOrDefault(i).Rate; currencies = currencies.Append(currency); } DataRates = new Rates(time, currencies); ListDataRates = ListDataRates.Append(DataRates); } return(ListDataRates); }
//Filtering exchange rates records to get specific currencies public IEnumerable <Rates> FindRates(IEnumerable <Rates> listdatarates, string symbols) { if (symbols != null) { var symbolss = symbols.Split(','); IEnumerable <Rates> Listdatarates = Enumerable.Empty <Rates>(); for (int a = 0; a < listdatarates.Count(); a++) { Rates datarates = new Rates(); Rates newrates = new Rates(); datarates = listdatarates.ElementAtOrDefault(a); IEnumerable <Rates.Currency> currencies = Enumerable.Empty <Rates.Currency>(); for (int i = 0; i < datarates.Currencies.Count(); i++) { for (int j = 0; j < symbolss.Length; j++) { if (datarates.Currencies.ElementAtOrDefault(i).Name == symbolss[j]) { Rates.Currency currency = new Rates.Currency(); currency.Name = datarates.Currencies.ElementAtOrDefault(i).Name; currency.Rate = datarates.Currencies.ElementAtOrDefault(i).Rate; currencies = currencies.Append(currency); } } } newrates = new Rates(datarates.Base, datarates.Time, currencies); Listdatarates = Listdatarates.Append(newrates); } for (int i = 0; i < Listdatarates.Count(); i++) { if (Listdatarates.ElementAtOrDefault(i).Currencies.Count() != symbolss.Length) { throw new Exception($"Symbols '{symbols}' are invalid. Maybe they are lowercase or not supported. Carefull with whitespaces between symbols."); } } return(Listdatarates); } else { return(listdatarates); } }