2014-09-25 6 views
0

배열의 문자열 양에 따라 my where 절 뒤에 여러 개의 ||를 넣으려고합니다. 그것은 무엇을해야다중 || after

string[] searchStrings = new string[]{"test", "tester", "test3"}; 

var files = Directory.EnumerateFiles("FolderPath", "*.*", SearchOption.AllDirectories) 
        .Where(s => s.Contains(searchStrings[0]) || s.Contains(searchStrings[1])); 

는 파일 폴더를 검색하고, 파일 이름이 다음 배열에서 각 키워드가 포함 된 경우이를 파일에 배치됩니다. 현재 더 많은 검색을 하드 코딩 할 수 있지만 검색 문자열 배열의 크기에 따라 자동으로이를 수행하는 방법이 있는지 궁금합니다.

답변

6

당신은 예를 들어 .Any()을 사용할 수 있습니다 : 디렉토리 이름이 searchStrings 컬렉션되는 searchString 적어도 하나의 포함 된 경우

.Where(dir => searchStrings.Any(s => dir.Contains(s))); 

그것은 확인하여 필요한 결과를 얻을 수 있습니다.

string.Join("|", searchStrings); 

내가 미리 컴파일 후 정규 표현식은 어떤 경우에는 더 빠른 것 같아요 당신을 제공합니다 :

+1

+1 더 빠릅니다. btw 방법 그룹 변환을 사용하여 단축 할 수 있습니다.'.Where (dir => searchStrings.Any (dir.Contains))' –

0

당신은 또한 당신이 사용하여 패턴을 구성 할 수 이러한 목적을 위해

Regex searchPattern = new Regex("test|tester|test3"); // "test(3|er)?" 

var files = Directory.EnumerateFiles("FolderPath", "*.*", SearchOption.AllDirectories) 
       .Where(s => searchPattern.IsMatch(s)); 

을 정규 표현식을 사용할 수 있습니다 유연성이 훨씬 더 많습니다.