2012-03-09 2 views

답변

6

작은 시퀀스를 다루는 경우 DaveShaw의 answer을 사용해도됩니다. ID 배열이 커지면 HashSet<T>에 배열을로드 한 다음 집합을 사용하는 경우를 제외하고는 똑같은 쿼리를 수행하는 것이 더 효율적입니다.

이 다른 더 복잡한 시나리오에 대한
var hashset = new HashSet<int>(ints); 
var matches = objects.Where(obj => hashset.Contains(obj.Id)); 

, 당신은 또한 알아야 할에 대한 키에 따라 두 시퀀스와 일치하고 원하는 결과를 얻을 수 Enumerable.Join.

var matches = from obj in objects 
       join id in ints 
       on obj.Id equals id 
       select obj; 
// var matches = objects.Join(ints, obj => obj.Id, id => id, (obj, id) => obj); 
2

Id 속성이 클래스의 인스턴스의 목록 objects입니다 가정, 당신은 이런 식으로 할 수 있습니다.

var ints = new[] {1, 2, 3, }; 
var matches = ints.Intersect(objects.Select(obj => obj.Id)); 

이 int 타입으로 개체를 투영하고 교차 설정 작업을 수행합니다

var ints = new[] {1, 2, 3, }; 
var matches = objects.Where(obj => ints.Contains(obj.Id)); 
-1

the where approach에 대한 대안은 다음과 같이 될 수 있습니다. 그냥 다른 접근법.

+1

개체 컬렉션과 반대되는 ID 컬렉션을 반환하지 않습니까? – Henry

+0

woops. 질문을 잘못 읽었다. 네가 옳아. – Foo42

+0

또한 배열의 .Contains()는 결과에 대해 새 Set을 만들 필요가 없기 때문에 .Intersect()보다 효율적이어야합니다. – DaveShaw

관련 문제