У меня есть следующий код:Как использовать специальные символы для фильтрации результатов с помощью LINQ?
public IEnumerable<T> Enumerate<T>(IEnumerable<T> source, string searchField, string searchString,
bool searchEmpty) where T : class
{
if (source == null) throw new ArgumentNullException("source");
if (searchField == null) throw new ArgumentNullException("searchField");
if (searchString == null) throw new ArgumentNullException("searchString");
return from item in source.AsParallel()
let property = item.GetType().GetProperties().Where(_ =>
{
var searchFieldAttribute =
_.GetCustomAttributes(typeof (SearchFieldAttribute), false).SingleOrDefault() as
SearchFieldAttribute;
return searchFieldAttribute != null && Attribute.IsDefined(_, typeof (SearchFieldAttribute)) &&
searchFieldAttribute.Name == searchField;
}).Single()
let value = property.GetValue(item, null)
let asString = value == null ? String.Empty : value.ToString()
where
searchEmpty && String.IsNullOrEmpty(asString) ||
!searchEmpty && asString.ToLower().Contains(searchString.ToLower())
select item;
}
Как вы можете видеть, я должен передать searchString
параметр в этот метод и использовать его для поиска или фильтрации source
коллекции, проверяя строковое представление значения свойства, содержит ли searchString
.
Что следует улучшить в этом методе для использования специальных символов (таких как *
, %
и т. Д.), Которые обычно используются в поисковых запросах и LIKE
операторов SQL. Есть ли какие-либо рекомендации, расширения или другие реализации метода Contains()
? Любые советы и предложения будут с благодарностью оценены.
'String' имеет' StartsWith' и 'EndsWith' методы, а также' Contains', которые соответствуют ведущему шаблону, завершающему подстановочный знак и т. Д. Соответственно. https://msdn.microsoft.com/en-us/library/System.String_methods(v=vs.110).aspx –