2011-02-24 4 views
0

다른 클래스를 가진 2 개의 컬렉션이 있습니다. MyClass1 - 이름, 나이, 기타 MyClass2 - 닉, 나이 등IEqualityComparer 구현이없는 LINQ

이 컬렉션을 제외하고 찾을 수 있습니다.

list1.Exept(list2, (l1,l2) => l1.Name==l2.Nick);

하지만 난이 코드를 작성하고 IEqualityComparer 인터페이스 내 자신의 비교 자 클래스를 구현해야하고이 작은 작업에 매우 오버 헤드 찾고 cannt 비슷 해요. 어떤 우아한 해결책이 있습니까?

답변

2

Except은 실제로 두 가지 다른 시퀀스 유형에서 작동하지 않습니다. 내가 대신, 당신은 같은 것을 사용하는 것이 좋습니다 :.

var excludedNicks = new HashSet<string>(list2.Select(x => x.Nick)); 
var query = list1.Where(x => !excludedNicks.Contains(x.Name)); 

(이 Except의 "독특한"측면을 수행하지 않습니다 당신이하는 것이 필요한 경우, 그렇게 말 우리는 무엇을 해결할 수하십시오 필요).

1

음, 모든 닉네임 세트를 만든 다음 실행하십시오.

var nicknames = new HashSet<string>(list2.Select(l2 => l2.Nick)); 
var newNames = from l1 in list1 
       where !nicknames.Contains(l1.Name) 
       select l1;