2011-02-23 3 views

답변

5
var filteredProjectCollection = projectCollection.Where(p => Ids.Contains(p.id)); 
1

var nonExcludedProjects = from p in allprojects where Ids.Contains(p => p.Id) select p;

0

은 내가 당신의 질문을 이해하지만 주사를해야 모르겠어요.

당신은 할 경우 IEnumerable을 열거, 을 당신이 그것을 같은 단지 또한 목록에있는 항목 contians 것을 필터링 할 : 목록 목록 다음 : IEnumerable을 최종 = enumerable.Where (예 => 목록을. 포함 (e));

1

.Where (p => list.Contains (p)) 답변 중 하나를 사용하려면 먼저 목록에서 HashSet을 만들어야 만 O (n)은 매번 검색합니다. 이것은 O (mn)에서 O (m + n)까지의 실행 시간을 줄입니다.

2

당신은 Except 방법을 사용하여보다 효율적인 구현을받을 수 있습니다 :

var specialProjects = Ids.Select(id => new Project(id)); 
var filtered = projects.Except(specialProjects, comparer); 

까다로운 것은 같은 종류의 두 개의 컬렉션으로 Except 작품이다 - 당신이 프로젝트의 두 컬렉션을 할 수 있도록 . 새로운 "더미"프로젝트를 만들고 ID를 기반으로하는 프로젝트를 비교하는 comparer을 사용하면됩니다.

또는 ID 컬렉션에만 Except을 사용할 수도 있지만 ID로 프로젝트를 조회해야 할 수 있습니다.이 방법을 사용하면 매력이 떨어집니다.

관련 문제