2012-05-28 2 views
0

개체 목록이 있으며이 목록에서 레코드 목록을 가져와야합니다. 내가 국가를 갖고있는 것처럼 국가 이름이 "호주"이고 국가가 "인도 네시아"인 국가 목록을 가져와야합니다. 목록은 정렬되지 않습니다.Linq를 사용하여 두 레코드 사이에 레코드 받기

오전 C#.

나는 첫 번째와 두 번째 인덱스를 얻은 다음 for 루프를 사용하여 목록을 가져 오는 데 사용하지만 단일 쿼리로 수행 할 수 있다면 편리 할 것입니다.

+1

당신이 현재 사용하고있는 코드를 게시 할 수있는 일을해야합니까? – caesay

답변

4

다음 작업을 수행 할 경우

var elementsBetween = allElements 
     .SkipWhile(c => c.Name != "Australia") 
     .Skip(1) // otherwise we'd get Australia too 
     .TakeWhile(c => c.Name != "Indonasia"); 

당신이 목록을 3 회 반복하지 않고 원하는 결과를 얻을 수 있습니다.

(이것은 당신의 국가가 Name 문자열 속성을 가진 예를 들면 Country 항목입니다 가정입니다.)이 모두 한 국가를 분류하지 않는

주 - 당신이 원하는 여부를 질문에서 불분명 여부를하지만, 그것의 사소한 경우 SkipWhile 앞에 OrderBy을 추가하십시오.

+0

linq 없이도 세 번이나 목록을 검토 할 필요가 없습니다. 보통 어떤 종류의 루프를 작성합니까? – caesay

+0

일반적으로 사람들이 LINQ로 인덱스 또는 카운트를 사용하면 인덱스 또는 카운트를 찾기 위해 목록을 반복합니다. (특히 OP는 두 항목의 색인을 찾는 것에 대해 게시했습니다.) LINQ가 없어도 "LINQ가 없으면 특히"라고 말하고 싶습니다. LINQ를 사용하면 실수로 무언가를 반복하는 것이 훨씬 쉬워집니다. – Rawling

+0

나는 그것에 동의하는 경향이있다. 그러나 당신의 대답의 일부는 당신이 "** 필요없이 ** 목록을 3 번 반복 할 때"라고 말할 때였습니다. ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 당신이 그것을한다면 목록을 반복 할 필요는 없습니다 ** LINQ가 있거나 없습니다. – caesay

0

var query = data.SkipWhile(x => x != "Australia").TakeWhile(x => x != "Indonesia") 
관련 문제