2017-02-07 5 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; 

Я пытаюсь получить индекс конкретного объекта в Category.Items[] (где поле идентификатор представляет собой конкретное значение, menuItems[items.SelectedIndex].category)

+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

Смежные вопросы