多个||在哪里

时间:2014-09-25 09:41:18

标签: c# linq

我试图根据数组中字符串的数量在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数组的大小自动执行此操作。

2 个答案:

答案 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);

我认为预编译后的正则表达式在某些情况下可能会更快,并为您提供更多的灵活性