2013-02-04 2 views
2

파일을 구문 분석하고 그 결과를 C#의 목록에 저장합니다. 그런 다음 DB 쿼리의 모든 결과를 다른 목록으로 구문 분석합니다. 일치하는 두 목록을 비교하고 결과를 다른 목록에 저장하여 출력 파일을 작성하려고합니다. 나는 두 사람의 목록을 비교하는 것이 파일에 약 16k 레코드가 있기 때문에 각 사람마다 DB에 대해 쿼리를 실행하는 것보다 빠르고 더 낫다고 생각했습니다.두 목록을 비교하고 일치하는 열을 별도의 목록에 저장

목록 1. 목록 파일 목록의 데이터 유형이 포함 찾기 위해 목록 2 목록 1을 비교하려고 노력하는 문자열 personsName, 문자열 주소, 문자열 PHONENUMBER

: 문자열

목록 2. 목록 DBRESULTS이의 데이터 유형을 포함 personsName 결과를 다른 목록으로 보내 결과를 출력합니다. List 2에있는 사람마다 여러 개의 결과가 표시 될 수 있으므로 모든 인스턴스를 찾아야합니다.

이와 같은 LINQ 쿼리로 시작되었지만 LINQ의 마스터가 아니기 때문에 도움이 필요합니다.

var matches = fileList.Where(a=>a.personsName == DBResults.where(s=>s,personsName).toList(); 

더 빠른 방법이 있다고 생각되는 경우 다른 제안이 있습니다. 나는 IDctionarys와 Hashtables가 테이블을 빠르게 찾는다는 것을 안다. 그러나 나는 keyvalue 쌍을 할 수 없다. 그래서 나는 3 개의 데이터 타입을 가지고있다.

답변

5

문제가 올바르게 이해되면 솔루션은 LINQ Join 메서드입니다.

var result = (from a in fileList 
       join s in DBResults on a.personsName equals s.personsName 
       select s).ToList(); 

또는 확장 메서드 구문을 사용하여 :

var result = fileList.Join(DBResults, a => a.personsName, s => s.personsName, (a, s) => s).ToList(); 

이 방법은 매우 빠르고 내부적으로 성능을 개선하기 위해 HashSet의를 사용합니다.

+1

구문을 모두 제공해 주셔서 감사 드리며 좋은 정보 인 전체 "(a, s) => s"구문에 대해 알지 못했습니다. –

관련 문제