C# 多个| |在何处之后
我正试图根据数组中字符串的数量在where子句后面加上多个| |C# 多个| |在何处之后,c#,linq,C#,Linq,我正试图根据数组中字符串的数量在where子句后面加上多个| | string[] searchStrings = new string[]{"test", "tester", "test3"}; var files = Directory.EnumerateFiles("FolderPath", "*.*", SearchOption.AllDirectories) .Where(s => s.Contains(searchStrings[0]
string[] searchStrings = new string[]{"test", "tester", "test3"};
var files = Directory.EnumerateFiles("FolderPath", "*.*", SearchOption.AllDirectories)
.Where(s => s.Contains(searchStrings[0]) || s.Contains(searchStrings[1]));
它应该做的是在文件夹中搜索文件,如果文件名包含数组中的每个关键字,则将其放入文件中。目前,我可以通过添加更多的| |来硬编码多少次搜索,但我想知道是否有一种方法可以根据SearchString数组的大小自动完成此操作。您可以使用。Any()
例如:
.Where(dir => searchStrings.Any(s => dir.Contains(s)));
它将允许通过检查目录名是否包含来自searchStrings
集合的至少一个searchString来获得所需的结果。您可以使用.Any()
例如:
.Where(dir => searchStrings.Any(s => dir.Contains(s)));
它将允许通过检查目录名是否包含来自
searchStrings
集合的至少一个searchString来获得所需的结果。您也可以为此使用正则表达式
Regex searchPattern = new Regex("test|tester|test3"); // "test(3|er)?"
var files = Directory.EnumerateFiles("FolderPath", "*.*", SearchOption.AllDirectories)
.Where(s => searchPattern.IsMatch(s));
您可以使用以下方法合成图案:
string.Join("|", searchStrings);
我认为预编译后的正则表达式在某些情况下可能会更快,并为您提供了更多的灵活性您也可以为此目的使用正则表达式
Regex searchPattern = new Regex("test|tester|test3"); // "test(3|er)?"
var files = Directory.EnumerateFiles("FolderPath", "*.*", SearchOption.AllDirectories)
.Where(s => searchPattern.IsMatch(s));
您可以使用以下方法合成图案:
string.Join("|", searchStrings);
我认为预编译后的正则表达式在某些情况下可能会更快,并为您提供了更大的灵活性+1您更快了。顺便说一句,这可以通过使用方法组转换来缩短:
。其中(dir=>searchStrings.Any(dir.Contains))
+1速度更快。顺便说一句,这可以通过使用方法组转换来缩短:.Where(dir=>searchStrings.Any(dir.Contains))