2017-02-07 1 views
0

나는 이상한 문제에 직면 해있다. 나는 C#으로 많은 것을 프로그래밍하지 않았고 최근에야 시작되었다. 그래서 질문이 사실 초보자 실수 인 경우 사전에 사과한다. LINQ 쿼리가 항상 0을 반환하는 이유는 무엇입니까?

int i = 0; 
var index = from x in (
       from v in Category.Items 
       select new { Key = i++, Value = v }) 
      where ((MenuCategory) x.Value).id == menuItems[items.SelectedIndex].category 
      select x.Key; 

나는 (id 필드가 특정 값, menuItems[items.SelectedIndex].category) Category.Items[]에서 특정 객체의 인덱스

+1

열의 인덱스가 0입니까? 모든것이 0에서 시작한다는 것을 기억하십시오. – WhatsThePoint

+0

맞습니다. 그러나 코드에서 뭔가 이상하지 않은 한 인덱스는 값으로 1을 사용해야합니다. – user1494162

+0

으로 테스트하고 있습니다. 인덱스가 필요하면 메소드 구문을 사용할 수 있으며 'Select '그것은 람다에있는 색인을 포함 할 것이다. https://msdn.microsoft.com/en-us/library/bb534869(v=vs.110).aspx – juharr

답변

5

LINQ 쿼리는이 같은 부작용을 일으킬하지 말아야을 얻기 위해 노력하고있어. 메서드 구문 및 초과로드가 Select 일 때 얻을 수 있습니다.

var selectedCatId = menuItems[items.SelectedIndex].category; 
var indexes = Category.Items 
    .Select((c, index) => new { Key = index, Value = c }) 
    .Where(x => ((MenuCategory)x.Value).id == selectedCatId) 
    .Select(x => x.Key); 
+0

이 작업을했습니다. 감사합니다. 부작용이있는 LINQ 쿼리를 사용하는 것이 좋지 않은 이유에 대해 자세히 설명해 주시겠습니까? – user1494162

+1

@ user1494162 : 좋은 사례를 제공해 주셨습니다. 쿼리는 하나 또는 여러 소스에서 제공되는 정보를 수집합니다. 이 쿼리가 무언가를 수정하는 경우 쿼리가 실행되는 방식 (예 :'OrderBy' 또는'Where'가 있고 그 순서가 나타나는 경우)에 따라 자주 변경됩니다. 누군가가이 논리를 바꾼다면 효과가 변할 수도 있지만 모르게 –

+0

아, 완벽하게 이해합니다. – user1494162

관련 문제