在C#中使用LINQ自动递增通用列表

时间:2011-10-14 08:21:52

标签: c# linq asp.net-mvc-3 linq-to-sql

使用LINQ投影项目时,是否有一种提供“自动增量”样式索引列(从1..x开始)的好方法?

作为一个基本的例子,我正在寻找下面的索引列,从1到列表中的项目数。

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

迭代列表将是一个简单的选择,但我想知道是否有更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:13)

您不能使用LINQ表达式执行此操作。您可以使用以下.Select扩展方法:

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

答案 1 :(得分:7)

您可以使用overload of Select来获取投影的索引:

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

请注意,此重载没有查询表达式支持。如果你实际上从数据库中获取值(不清楚list是否真的是List<T>),你应该确保你有一个合适的顺序,否则结果有点武断。 / p>