///<inheritdoc/> public (IEnumerable <IndexEntry <T> > Entries, string Geohash) Query(string geohash, int minimumHits = 1, bool lockPrecision = false, T exclude = default) { IEnumerable <IndexEntry <T> > entries; while (true) { entries = Search(geohash); if (exclude != null && !exclude.Equals(default(T))) { entries = entries.Where(entry => !entry.Value.Equals(exclude)); } if (entries.Count() >= minimumHits) { break; } else if (lockPrecision) { break; } else if (geohash.Length == 1) { break; } geohash = _geohasher.Reduce(geohash); } return(entries, geohash); }
///<inheritdoc/> public (IEnumerable <IndexEntry <T> >, string) Query(string hash, int minimumHits = 1, bool lockPrecision = false, T exclude = default) { IEnumerable <IndexEntry <T> > entries; while (true) { var trieMapSearchResult = _trieMap.Search(hash); entries = trieMapSearchResult.SelectMany(sr => sr.IndexEntries); // Each entry in the map is a list, so we flatten the result int hitCount; if (exclude != null && !exclude.Equals(default(T))) { entries = entries.Where(entry => !entry.Value.Equals(exclude)); } hitCount = entries.Count(); if (hitCount >= minimumHits) { break; } else if (lockPrecision) { break; } else if (hash.Length == 1) { break; } hash = _geohasher.Reduce(hash); } return(entries, hash); }