private IEnumerable <IDictionary <string, EntityProperty> > InternalQuery(string filterString, IList <string> selectColumns)
        {
            Debug.WriteLine($"Q: {filterString}");

            var parseResult = FilterStringParser.Parse(filterString);

            if (!parseResult.Success)
            {
                throw new InvalidFilterString(parseResult.Error);
            }

            foreach (var row in _tableStore.GetAllRows(_table))
            {
                if (!parseResult.Root.Execute(row, out string error))
                {
                    if (error != null)
                    {
                        throw new QueryFailed(error);
                    }
                }
                else
                {
                    if (selectColumns != null)
                    {
                        yield return(row.Where(p => selectColumns.Contains(p.Key)).ToDictionary(p => p.Key, p => p.Value));
                    }
                    else
                    {
                        yield return(row);
                    }
                }
            }
        }