2013-04-05 2 views
3

Я нашел пример здесь:Запрос для строки, содержащей один или несколько из многих строк

var foo = things.Where(data => myList.Contains(data.Title)); 

Однако это точное соответствие строки. Меня это интересует только в том случае, если data.Title.ToLower() содержит любую строку, найденную в списке ToLower().

Скажите, что в списке есть яблоко, книга ClocK.

data.Title, например: Apple Jacks, Book Club, Clockwork Book, все это прекрасно. Но когти и продукты, клики, основы применения, не принимаются.

ответ

4

Вы хотите посмотреть для каждого элемента, который Title может содержать (без учета регистра):

var foo = things.Where(data => myList 
       .Any(item => data.Title.ToLower().Contains(item.ToLower()))); 
+0

Если Название ToLower содержит 1 или более пункта TOLOWER, сохранить это, иначе, отказаться. – jmasterx

1
var myList = new List<string> { "apple", "book", "ClocK" }; 
var things = new List<string> { "Apple Jacks", "Book Club", "Clockwork Book", "Claws and Foods", "Clicks", "Application Fundamentals" }; 
var myRegex = new Regex(string.Join("|", myList.Select(x => Regex.Escape(x))), RegexOptions.IgnoreCase); 
foreach (var matchingThing in things.Where(x => myRegex.IsMatch(x))) 
    Console.WriteLine(matchingThing); 

Выходы:

Apple Jacks 
Book Club 
Clockwork Book 
+0

Хотя это круто, я считаю, что ответ Герта легче понять с первого взгляда. – jmasterx