2009-06-09 5 views
0

LINQ를select 문 안에 위치를 얻는 방법

처럼 사용하고 있습니다.
from a in b.Descendants("SomeNode") 
select new MyClass 
    { 
     isfirst= false, 
     islast = false, 
    }; 

어떻게 요소의 위치를 ​​얻을 수 있습니까? 나는 기본적으로 어느 것이 먼저이고 어떤 것이 마지막 요소인지 알고 싶다.

+1

질문 죄송 물어하지만, 왜 알고 싶니? 우리가 문제 공간을 이해할 수 있다면 더 좋은 대답을 얻을 수있을 것입니다. – Lazarus

+0

select 안에 객체를 만들어서 CSS 클래스를 적용 할 위치를 취하고 싶습니다. – Tanmoy

답변

2

뭔가 같은 ...

var res = b.Select((l, i) => 
      new MyClass { IsFirst = (i == 0), IsLast = (i == b.Count-1) }); 

은 ... 작동합니다.

설명 : 익명 클래스를 구체적 클래스로 변경했습니다. 이것은 IsFirst와 IsLast가 MyClass라는 클래스에 setter가있는 부울 속성이라고 가정합니다.

+0

이 문제가 생겼습니다.이 경우 익명의 클래스를 사용해야합니다. 또한 XML에 LINQ를 사용하고 있습니다. – Tanmoy

+0

오. 그 일. 감사 :) – Tanmoy

1

람다 구문을 사용해야합니다.

b.Descendants("SomeNode").Select((pArg, pId) => new { Position = pId}); 
0

LP의 솔루션은 작동하지만 당신은 또한 더 읽기, 단어 기반 LINQ-형식에서 표현할 수 : 이제

static class EnumerableExtensions { 
    public struct IndexedItem<T> { 
     public T Item; 
     public int Index; 
    } 

    public static IEnumerable<IndexedItem<T>> Enumerate<T>(this IEnumerable<T> Data) { 
     int i = 0; 
     foreach (var x in Data) 
      yield return new IndexedItem<T> { Index = i++, Item = x };   
    } 
} 

당신이 말할 수 있습니다 :

from a in b.Descendants("SomeNode").Enumerate() 
select new MyClass { 
    isFirst = (a.Index == 0), 
    isLast = (...), 
    element = a.Item }