public IEnumerable <KeyValuePair <string, string> > Execute() { log.Info(string.Format("Indexed scan operation for '{0}', filter: '{1}' {2} '{3}'.", tableName, filter.Column, OperatorConverter.ToComboString(filter.Operator).ToString(), filter.Value)); switch (filter.Operator) { case Operator.Equal: var keys = index.Get(filter.Value); foreach (var key in keys) { yield return(new KeyValuePair <string, string>(key, repository.Get(databaseFile, table.Name, key))); } break; case Operator.NotEqual: foreach (var row in GetNotEqual()) { yield return(row); } break; case Operator.Less: foreach (var row in GetLess()) { yield return(row); } break; case Operator.LessOrEqual: foreach (var row in GetLessOrEqual()) { yield return(row); } break; case Operator.Greater: foreach (var row in GetGreater()) { yield return(row); } break; case Operator.GreaterOrEqual: foreach (var row in GetGreaterOrEqual()) { yield return(row); } break; } }