Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多个| |在何处之后_C#_Linq - Fatal编程技术网

C# 多个| |在何处之后

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]

我正试图根据数组中字符串的数量在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]));
它应该做的是在文件夹中搜索文件,如果文件名包含数组中的每个关键字,则将其放入文件中。目前,我可以通过添加更多的| |来硬编码多少次搜索,但我想知道是否有一种方法可以根据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))