2011-11-01 3 views
1

문자열 [] 배열의 항목을 LINQ를 사용하는 객체가 포함 된 일반 목록과 비교하려면 어떻게해야합니까?C# 문자열 [] 배열을 일반 객체 목록과 비교하십시오.

이 일반 목록에는 picInfo라는 개체가 포함되어 있습니다. picinfo 클래스는 다음과 같습니다.

[ProtoContract] 
public class PicInfo 
{ 
[ProtoMember(1)] 
public string fileName { get; set; } 
[ProtoMember(2)] 
public string completeFileName { get; set; } 
[ProtoMember(3)] 
public string filePath { get; set; } 
[ProtoMember(4)] 
public byte[] hashValue { get; set; } 

public PicInfo() { } 
} 

문자열 [] 배열에 그림 파일 경로가 포함되어 있습니다. 메신저가 일반 목록에이 특정 그림의 경로가 이미 있는지 확인하려고합니다.

사진의 일반적인 목록은 다음과 같습니다

List<PicInfo> pi = new List<PicInfo>(); 

일반 목록이 이미 그 사진이있는 경우, 내가 문자열 [] 배열에서 항목을 제거하고 싶습니다.

foreach 루프를 사용하여이 작업을 수행하고 항목 1을 1로 비교할 수 있습니다. 어떻게 linq를 사용하여이 작업을 수행 할 수 있습니까?

미리 감사드립니다.

답변

3

당신은 중복을 결정하고이를 제거 할 수 있습니다 :

var duplicates = pi.Where(p => picArray.Contains(p.filePath); 
foreach(string fileName in duplicates) 
{ 
    //do something 
} 

을하지만 청소기 접근이 배열 생성을위한 좀 더 오버 헤드가 있지만, Except()를 사용하여 새 배열을 만드는 것보다 읽기 :

picArray = picArray.Except(pi.Select(p=> p.filePath)).ToArray(); 
+0

thnx 시도해 보겠습니다. 제대로 작동하는 경우 답변으로 표시하겠습니다. – Yustme

관련 문제