LinQ WHERE string.Contains或string.IndexOf?

Seb*_*Seb 3 .net c# linq

我需要写一些可以得到相同结果的东西:

var result = collection.Where( o => o.Name.IndexOf( "some_string2" ) != -1 || o.Name.IndexOf( "some_string_2" ) != -1 || o.Name.IndexOf( "some_string3" ) != -1 )
Run Code Online (Sandbox Code Playgroud)

要检查的字符串的数量和值(some_string_1,2和3)是未知的(来自DB),所以更通用的...

我试过以下,但失败了......

var stringsToCheck = someCommaSeparatedStrings.ToLower().Split( ',' ).ToList();
var result = collection.Where( o => stringsToCheck.Contains( o.ToLower() ) );
Run Code Online (Sandbox Code Playgroud)

换句话说,我需要从集合中检索名称包含一些特定字符串的所有对象.

Ser*_*rvy 23

var result = collection.Where(item => stringsToCheck.Any(stringToCheck => 
    item.Name.Contains(stringToCheck)));
Run Code Online (Sandbox Code Playgroud)

用英语读取这是:给我集合中的所有项目,在其中检查其中一个字符串是集合中字符串的子字符串.


Cha*_*nga 5

如果要测试是否o.Name包含stringToCheck则:

var result = collection.Where( o => stringsToCheck.Any(a => o.Name.Contains(a)));
Run Code Online (Sandbox Code Playgroud)

如果您只需要测试相等性,则:

var result = collection.Where( o => stringsToCheck.Contains(o.Name));
Run Code Online (Sandbox Code Playgroud)

注意:如果您需要应用案例规范化,ToLower()则应相应地应用。