2012-08-24 72 views
1

我需要检索我的项目的索引,因为我在Linq中选择它们,这是最好的方法吗?我不喜欢这样一个事实,即我必须在Linq语句之外声明一个变量。Linq检索索引

List<int> ApplianceIds = new List<int>(); 
ApplianceIds.Add(6); 
ApplianceIds.Add(3); 
ApplianceIds.Add(4); 
ApplianceIds.Add(5); 
ApplianceIds.Add(6); 
ApplianceIds.Add(7); 
ApplianceIds.Add(2); 

int ind = 0; 

var y = (from a in ApplianceIds 
     let index = ind++ 
     select new {Appliance = a, Index = index}).ToList(); 
+0

ApplianceIds是'List ',你已经有索引了。你可以使用for循环。 – jrummell

回答

10

我会这样做;

var y = ApplianceIds.Select ((a,i) => new { Appliance = a, Index = i }).ToList(); 
+0

这个。大多数LINQ扩展方法都有提供索引的重载。 – BAF

+1

这确实回答了这个问题。但是,为什么使用LINQ获取'List '中的项目索引呢? – jrummell

+0

用于演示目的。也许导致这个问题的真实场景没有来自列表的数据。或者,也许他正在编写一个查询传递给另一个函数。存在索引的重载是有原因的。 – BAF

1

ApplianceIds是一个List,你已经有了索引。你可以使用for循环。

for (int i=0; i<ApplianceIds.Count; i++) 
{ 
    // i is your index 
} 
+0

按照他的要求,这并不能帮助他在LINQ中选择索引。 – BAF

+1

对,这只是另一个“[必须LINQ所有的东西!](http://knowyourmeme.com/memes/x-all-the-y)”的问题。对不起,LINQ并不是所有事情的最佳答案。 – jrummell

+0

这可能是一个简单的例子来证明他想做什么。使用for循环会导致您失去LINQ为您提供的可组合性。 – BAF