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());
        }