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

Nic*_*ick 8 c# linq linq-to-sql asp.net-mvc-3

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

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

var items = from s1 in list
    select new BrowsingSessionItemModel { Id = s1.Id, Index = 0 };
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*rov 13

你不能用LINQ表达式做到这一点.您可以使用以下.Select扩展方法:

var items = list.Select((x, index) => new BrowsingSessionItemModel { 
    Id = x.Id, 
    Index = index 
});
Run Code Online (Sandbox Code Playgroud)

  • `Index = index + 1`. (2认同)

Jon*_*eet 7

您可以使用其重载Select来为投影提供索引:

var items = list.Select((value, index) => new BrowsingSessionItemModel { 
                                                Id = value.Id,
                                                Index = index
                                          });
Run Code Online (Sandbox Code Playgroud)

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