2013-04-05 119 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 2013-04-05 13:32:19

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

虽然这很酷,但我发现Gert的答案一目了然,更容易理解。 – jmasterx 2013-04-05 13:35:43