// GROUP BY OgdLinien.Id, OgdLinien.Bezeichnung

        public async Task<int> CreateLookupTableAsync()
        {
            var haltestellen = await _connection.Table<OgdHaltestelle>()
                .ToListAsync()
                .ConfigureAwait(false);

            var toInsert = new List<Haltestelle>();

            foreach (var h in haltestellen)
            {
                var result = await _connection
                    .QueryAsync<LinienAtHaltestelleModel>(String.Format(LinienAtHaltestelleQuery, h.Id))
                    .ConfigureAwait(false);

                var groupedLinien = (from model in result
                                     group model by new { model.Id, model.Bezeichnung }
                                         into g
                                         select new { g.Key.Id, g.Key.Bezeichnung }).ToList();

                string linienDisplay = String.Join(", ", groupedLinien.Select(r => r.Bezeichnung));
                string linienIds = String.Join(",", groupedLinien.Select(r => r.Id));

                // Take only records where RblNummer exists
                string rblNummern = String.Join(",", result
                    .Where(r => !String.IsNullOrWhiteSpace(r.RblNummer))
                    .Select(r => r.RblNummer));

                // eg.Abdsdorf-Hippersdorf S Bahn has no Steige
                if (!String.IsNullOrWhiteSpace(rblNummern))
                {
                    var haltstelle = new Haltestelle()
                    {
                        Id = h.Id,
                        Diva = h.Diva,
                        Bezeichnung = h.Bezeichnung,
                        Longitude = h.Longitude,
                        Latitude = h.Latitude,
                        Linien = linienDisplay,
                        LinienIds = linienIds,
                        RblNummern = rblNummern
                    };

                    toInsert.Add(haltstelle);
                }
                else
                {
                    Debug.WriteLine(h.Bezeichnung + " was omitted because of missing Steige");
                }
            }

            return await _connection.InsertAllAsync(toInsert).ConfigureAwait(false);
        }
        public async Task<MonitorInformation> RetrieveMonitorInformationAsync(Haltestelle haltestelle)
        {
            var rbls = RblNummernStringToIntList(haltestelle.RblNummern);

            if (!rbls.Any())
                return new MonitorInformation(MonitorInformationErrorCode.RblNotSpecified);

            var schnittstelle = new WienerLinien.Api.Realtime.EchtzeitdatenSchnittstelle();
            schnittstelle.InitializeApi(_apiKey);

            var response = await schnittstelle
                    .GetMonitorInformationAsync(rbls, null)
                    .ConfigureAwait(false);

            return response;
        }