2010-02-21 6 views
0

IEnumberable을 통해 쿼리하는 linq 쿼리가 있습니다. 내 where 절에 일치하는 요소가있을 때 IEnumberable에서 요소의 위치를 ​​알고 싶습니다.LINQ를 사용하여 IEnumerable을 통해 쿼리 할 때 XElement의 위치

var result = from e in elements 
      where (string) e.Attribute("class") == "something" 
      select e.Position(); 

물론 e.Position()은 컴파일되지 않습니다. e.Position()의 값은 IEnumberable 요소에서 선택된 요소의 위치입니다.

방법에 대한 아이디어가 있으십니까?

답변

2

쿼리 구문에서 해당 기능을 사용할 수 없기 때문에 인덱스를 허용하는 overloaded Select method을 사용해야합니다.

elements.Select((e, i) => new { Element = e, Index = i }) 
     .Where(item => (string)item.Element.Attribute("class") == "something") 
     .Select(item => item.Index); 
+0

빠른 답장을 보내 주셔서 감사합니다. –

0

당신은 당신이 (새로운) Zip 방법을 사용뿐만 아니라 쿼리 구문을 사용하여 같은 일을 쓸 수 있습니다 .NET 4.0을 사용하는 경우. 그것은 몇 가지 임시 개체를 생성, 그래서 효율적 아니지만, 어떤 사람들은 더 읽기 찾을 수 있습니다 : 번호의 생성 순서에

var result = from e in elements.Zip 
       (Enumerable.Range(0, elements.Count()), Tuple.Create) 
      where (string)e.Item1.Attribute("class") == "something" 
      select e.Item2; 

그것은 '지퍼'입력 컬렉션 (동일한 범위와 같이 컬렉션의 길이). 그런 다음 Tuple 클래스를 사용하여 결합 된 값을 저장할 수 있습니다 (그게 내가 한 일임) 또는 익명 유형을 사용할 수 있습니다.

관련 문제