2016-10-10 3 views
1

C#을 사용하여 개체 목록과 int 목록이 있습니다. 예를 들어, eventId가있는 이벤트 목록이 있습니다.두 목록을 비교하는 가장 쉬운 방법은 무엇입니까?

이벤트 목록을 int 목록과 비교하고 int 목록에 ID가있는 모든 개체를 제거하고 싶습니다. 따라서, 예를 들어, 정말 같은 개체의 목록이 있습니다

Event Id  Event Name 
1   Event1 
2   Event2 
3   Event3 

과의 int의 내 목록

1을 포함하고 3. 그래서 내 유일한 Event2을 떠나합니다 Event1 및 Event3을 제거하고 싶습니다. 이 일을하는 가장 좋은 방법은 무엇입니까?

나는 또한 역순으로하고 싶습니다. 그래서 객체 목록에 나타나지 않는 int 목록을 얻고 싶습니다. 그래서 int리스트에 나타나지 않는 이벤트리스트를 가지고 있고 객체리스트에없는 int리스트를 가지고 있습니다.

현재 로선 여러 개의 foreach 및 if 문을 사용하고 있으며 매우 비효율적 인 것처럼 보입니다. 더 쉬운 것이 많은 코드입니다. 나는 아마 linq를 사용하여 할 수있어,하지만 난 아직도 배우고 완전히 linq을 파악하지 않았습니다.

답변

5

짐작 하시겠지만 LINQ를 사용할 수 있습니다. 이벤트 목록이 있는데 두 번째 목록에 ID가있는 이벤트를 가져 오려고합니다.

var result = listOfEvents.Where(ev => listOfInts.Contains(ev.Id)).ToList(); 

그리고 역이 당신의 결과를 포함하는 새 목록를 생성

var result = listOfEvents.Where(ev => !listOfInts.Contains(ev.Id)).ToList(); 

주, 그것은 장소에 목록을 수정하지 않습니다. 내가 LINQ 접근 방식이 바람직하다 건의 할 것입니다,하지만 당신은 정말이 일을 원한다면, 당신은 유사한 조건을 List<T>RemoveAll 방법을 사용하고 전달할 수 있습니다

listOfEvents.RemoveAll(ev => listOfInts.Contains(ev.Id)); 
+0

덕분에,이 완벽합니다. – necrofish666

+2

결과 사용에 따라 끝 부분에서 ToList() 메서드에 대한 호출을 추가하지 않는 것이 좋습니다. LINQ는 잘못된 평가를 사용합니다. ToList()를 호출하면 즉시 평가가 이루어집니다. –

관련 문제