2013-03-11 2 views
1

내가 사람 개체의 컬렉션을 말해봐 결정하십시오 스타크 또는 웨인 가족의 당겨 회원 LINQ는

var guestlist = new List<string> {"Stark", "Wayne"}; 

가 어떻게 LINQ 사용할 수 있습니다 (양호하게는 람 바어 기반을, 그러나 이것은 문제가 너무 많이하지 않습니다) - 내 파티에 초대했다? 즉. 나는 첫 번째 컬렉션에 Wayne 또는 Stark 가족 구성원이 있다는 표시가 아닌 다른 (세 번째) 컬렉션으로 끝내기를 원합니다.

답변

3

이 시도 :

var invited = persons.Where(p => guestlist.Contains(p.Surname)); 
1

나는 이것을 시도 할 것이다 :

var peopleList = GetPeopleList(); 
var guestList = new List<string> {"Stark", "Wayne"}; 
var matchList = peopleList.Where(o => guestList.Contains(o)); 
1
var result = people.Where(x => guestlist.Contains(x.Surname)); 
2

이 작업은 개념적으로, 조인입니다. 그것은 서로 다른 두 세트의 "속한"객체와 일치합니다. 사람들의 목록의 각 항목에 대한 이름 목록에 Contains을 사용하는 것을 포함, 다른 모든 솔루션은 모두 컬렉션의 크기가 작지만 솔루션은 확장 성이 좋지 않을 때 작동합니다

var query = from person in people 
    join name in guestlist 
    on person.Surname equals name 
    select person; 

주 큰 컬렉션의 경우 각 항목에 대한 선형 검색 을 수행해야합니다.. 조인은 제대로 구현되면 (LINQ가 수행함) 훨씬 효율적으로 검색 할 수있는 컬렉션에 게스트 목록을 배치합니다.