2011-10-14 38 views
8

是否有使用LINQ投影項目時提供一個「自動遞增」式的索引列(從1..X)的好辦法?自動增加在C#中使用LINQ泛型列表

作爲一個基本的例子,我在尋找索引列的下方,從1到列表中的項目數。

var items = from s1 in list 
    select new BrowsingSessionItemModel { Id = s1.Id, Index = 0 }; 

遍歷列表將是簡單的選擇,但我想知道是否有更好的方法來做到這一點?

+0

一般情況下,你可以生成一個新的使用Enumerable.Range(1,numOfItems)遞增枚舉,但在你的情況下,使用選擇超載是您需要的更好的選擇。 –

回答

13

你不能用LINQ表達式做到這一點。您可以使用,雖然下面的.Select擴展方法:

var items = list.Select((x, index) => new BrowsingSessionItemModel { 
    Id = x.Id, 
    Index = index 
}); 
+0

感謝您的回答。 – Nick

+0

什麼是最有效的方式,從1開始,而不是0? – Nick

+2

'Index = index + 1'。 –

7

可以使用overload of Select更是把提供索引到投影以及:

var items = list.Select((value, index) => new BrowsingSessionItemModel { 
               Id = value.Id, 
               Index = index 
              }); 

注意,不存在用於查詢表達式的支持這個過載。如果你實際上是從數據庫中獲取的值(現在還不清楚是否list真的是List<T>),你應該確保你有適當的排序,否則的結果是有點武斷。