我试图根据数组中字符串的数量在where子句后面有多个||。
string[] searchStrings = new string[]{"test", "tester", "test3"};
var files = Directory.EnumerateFiles("FolderPath", "*.*", SearchOption.AllDirectories)
.Where(s => s.Contains(searchStrings[0]) || s.Contains(searchStrings[1]));
它应该做的是在文件夹中搜索文件,如果文件名包含数组中的每个关键字,则将其放入文件中。目前我可以通过添加更多||来硬编码多少次搜索,但我想知道有没有办法根据searchStrings数组的大小自动执行此操作。
答案 0 :(得分:6)
例如,您可以使用.Any()
:
.Where(dir => searchStrings.Any(s => dir.Contains(s)));
通过检查目录名是否包含来自searchStrings
集合的至少一个 searchString ,可以获得所需的结果。
答案 1 :(得分:0)
您也可以将正则表达式用于此目的
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);
我认为预编译后的正则表达式在某些情况下可能会更快,并为您提供更多的灵活性