2017-02-07 112 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[]索引(其中域ID为一个特定的值,menuItems[items.SelectedIndex].category

+1

它是因为该列的索引是0?记住一切都从0开始 – WhatsThePoint

+0

正确,但除非代码中有其他错误,否则索引应该为1我正在使用 – user1494162

+0

测试它的值如果需要索引,可以使用方法语法,并且有'Select '这将包括lambda中的索引。 https://msdn.microsoft.com/zh-cn/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

相关问题