2012-08-24 70 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