public IQueryable <ITimeseriesObservations> GetObservations(IEnumerable <TimeseriesKey> seriesKeys, string frequencies) { var seriesList = new Dictionary <TimeseriesKey, ITimeseriesObservations>(); _client = new SDMXServiceClient(); var genericDataSet = _client.GetGenericData(GetObservationsQuery.BuildObservationQuery(DatabaseID, seriesKeys.ToTimeseriesKeyString(QuotedSplitStringOptions.Quoted))); var dataSet = genericDataSet.Element(Progm + "DataSet"); if (dataSet != null) { var seriesElements = dataSet.Elements(Progg + "Series"); foreach (var seriesElement in seriesElements) { // string seriesKey1 = ((TimeseriesKey[])seriesKeys)[0].Key; var seriesKey = new TimeseriesKey(((TimeseriesKey[])seriesKeys)[0].Key); var seriesAttributes = seriesElement.Element(Progg + "Attributes"); var seriesObservation = seriesElement.Elements(Progg + "Obs"); ITimeseriesObservations series; if (!seriesList.ContainsKey(seriesKey)) { series = new EcOSTimeseries(SourceKey, seriesKey); seriesList.Add(seriesKey, series); } else { series = seriesList[seriesKey]; } foreach (var observation in seriesObservation) { var time = observation.Element(Progg + "Time"); var obsEl = observation.Element(Progg + "ObsValue"); if (obsEl != null && time != null) { var obs = obsEl.Attribute("value"); if (obs != null) { series.Observations[time.Value] = Convert.ToDouble(obs.Value); } } } } } return(seriesList.Values.AsQueryable()); }
public IQueryable <ITimeseriesMetadata> GetMetadata(IEnumerable <TimeseriesKey> seriesKeys, IEnumerable <string> headerList) { var seriesList = new List <ITimeseriesMetadata>(); _client = new SDMXServiceClient(); var genericMetadata = _client.GetTimeSeriesAttributes(GetMetadataQuery.BuildMetadataQuery(DatabaseID, seriesKeys.ToTimeseriesKeyString(QuotedSplitStringOptions.Quoted))); var metadataSet = genericMetadata.Element(Progm + "DataSet"); if (metadataSet != null) { var seriesElements = metadataSet.Elements(Progg + "Series"); foreach (var seriesElement in seriesElements) { var seriesAttr = seriesElement.Element(Progg + "SeriesKey"); var seriesAttributes = seriesElement.Element(Progg + "Attributes"); var metadataDictionary = new Dictionary <string, string>(); //string seriesKey = ((TimeseriesKey[])seriesKeys)[0].Key; var seriesKey = new TimeseriesKey(((TimeseriesKey[])seriesKeys)[0].Key); foreach (var value in seriesAttr.Elements()) { var conceptAtt = value.Attribute("concept"); var valueAtt = value.Attribute("value"); if (headerList.Any(str => str.Contains(conceptAtt.Value))) { metadataDictionary[conceptAtt.Value] = valueAtt.Value; } } foreach (var value in seriesAttributes.Elements()) { var conceptAtt = value.Attribute("concept"); var valueAtt = value.Attribute("value"); if (headerList.Any(str => str.Contains(conceptAtt.Value))) { metadataDictionary[conceptAtt.Value] = valueAtt.Value; } } seriesList.Add(new EcOSTimeseries(SourceKey, seriesKey, metadataDictionary)); } } return(seriesList.AsQueryable()); }