2010-03-01 8 views
2

Array1의 전체 문자열이 Array0의 문자열에 들어있는 Array0의 모든 요소를 ​​찾고자하는 두 개의 배열이 있습니다. 다음은 시나리오입니다.문자열 비교를 기반으로 한 배열 교차점

특정 디렉토리에있는 모든 XML 파일의 전체 경로가 포함 된 문자열 배열이 있습니다. 그런 다음 위치 목록을 가져오고 xml 파일의 파일 이름이 loc id 인 XML 파일 경로의 하위 집합 만 반환하려고합니다.

그래서, 내 Array0 같은 것을 가지고

c:\some\directory\6011044.xml 
c:\some\directory\6028393.xml 
c:\some\directory\6039938.xml 
c:\some\directory\6028833.xml 

을 그리고 내 배열 1이 있습니다

6011044 
6028833 

을 ... 그리고 난 단지 파일 경로 문자열이 문자열을 포함하는 경우 Array0의 결과를 갖고 싶어 Array1에서. 여기

는 ... 내가 뭘 찾았는지

filesToLoad = (from f in Directory.GetFiles(Server.MapPath("App_Data"), "*.xml") 
    where f.Contains(from l in locs select l.CdsCode.ToString()) 
    select f).ToArray(); 

입니다 ...하지만 난이에서 이해할 수있는 다음과 같은 컴파일러 오류 ...

Argument '1': cannot convert from 'System.Collections.Generic.IEnumerable<string>' to 'string' 

을 ... 수 영어 관점이지만 해결 방법을 모른다.

내가 잘못된 각도에서오고 있습니까?

한 조각이 누락 되었습니까?

편집 여기

나는 그것을 변경했습니다 무엇 :

filesToLoad = (Directory.GetFiles(Server.MapPath("App_Data"), "*.xml")) 
    .Where(path => locs.Any(l => path.Contains(l.CdsCode.ToString())) 
).ToArray(); 

...하지만 이것은 여전히 ​​그들 중 하나가 아닌 경우에도 내 모든 .xml 파일을 가져옵니다 내 locs 엔터티 컬렉션. 내가 뭘 잘못 넣었 니?

분명히 나는 ​​각 부분이 무엇을하고 있는지에 대한 약간의 설명이 도움이 될 것 같아서 주요 개념을 놓치고있다.

편집 2 아래의 Mark의 설명을 참조하십시오. 내 문제에 대한 대답은 나였다. 내 locs 컬렉션에 CDS 값이 0 인 레코드 하나가 있었으며 따라서 내 xml 컬렉션의 모든 레코드와 일치했습니다. 만약 내가 혼자서 코드를 작성할 수있는 방법을 찾을 수 있다면, 나는 완벽한 개발자가 될 것이다! 당신은 Any을 놓치고

답변

3

:

string[] result = paths.Where(x => tests.Any(y => x.Contains(y))).ToArray(); 
+0

에 가입 할 수 있습니다,하지만 난 그냥 나를 위해 일을 얻을 수 없습니다. 좀 더 도와주세요;) –

+1

가장 좋은 추측 : 귀하의 l.CdsCode.ToString() 중 하나가 빈 문자열입니다. 이것은 모든 파일과 일치합니다. –

+0

GENIUS! 내 locs 컬렉션에 0이라는 기록이 있습니다. 그리고 내 CDS 코드에는 모두 0이 들어 있으므로 다시 돌아 왔습니다. 그레이트 추측! –

1

당신도 내가 당신 말이 맞아 기분이 그들에게

 var filesToLoad = (from f in Directory.GetFiles(Server.MapPath("App_Data"), "*.xml") 
     from l in locs 
     where f.Contains(l.CdsCode.ToString()) 
     select f).ToArray(); 
관련 문제