Если вы хотите проверить, содержит ли строка другую, вы можете использовать:
myList = myList.Where(x => x.Message.Contains(criteria.SearchText)).ToList();
или
myList = myList.Where(x => x.Message.IndexOf(criteria.SearchText) != -1).ToList();
(второй вариант хорош, потому что с IndexOf
вы можете указать CultureInfo
)
Если вы хотите смешать пользовательское слово в Regex
, вы должны использовать Regex.Escape()
, чтобы экранировать его, так что если пользователь пишет a*
, искомый текст будет a*
вместо any number of a
.
string pattern = string.Format(".*{0}.*", Regex.Escape(criteria.SearchText));
Но обратите внимание, что, как написано, это эквивалентно:
string pattern = string.Format("{0}", Regex.Escape(criteria.SearchText));
потому что вы не добавили привязки к своему регулярному выражению, поэтому регулярное выражение будет искать в любом месте строки.
Если вы хотите привязать пользовательское слово, например, вы хотите искать слова, начинающиеся с
string pattern = string.Format("^{0}", Regex.Escape(criteria.SearchText));
или заканчивается
string pattern = string.Format("{0}$", Regex.Escape(criteria.SearchText));