private IReadOnlyList <string> readAllValuesFrom(DirectoryReader reader, string field) { var rawValues = reader.ReadRawValuesFrom(field); IEnumerable <string> enumerable; if (_adapter.IsFloatField(field)) { enumerable = rawValues.Select(term => term.TryParseFloat()) .Where(val => val.HasValue) .Select(val => val.Value) .Distinct() .OrderBy(val => val) .Select(val => val.ToString(Str.Culture)); } else if (_adapter.IsIntField(field)) { enumerable = rawValues.Select(term => term.TryParseInt()) .Where(val => val.HasValue) .Select(val => val.Value) .Distinct() .OrderBy(val => val) .Select(val => val.ToString(Str.Culture)); } else { enumerable = rawValues.Select(term => term.Utf8ToString()) .Distinct() .OrderBy(Str.Comparer); } var result = enumerable.ToReadOnlyList(); return(result); }