使用LINQ投影项目时,是否有一种提供“自动增量”样式索引列(从1..x开始)的好方法?
作为一个基本的例子,我正在寻找下面的索引列,从1到列表中的项目数。
var items = from s1 in list
select new BrowsingSessionItemModel { Id = s1.Id, Index = 0 };
迭代列表将是一个简单的选择,但我想知道是否有更好的方法来做到这一点?
答案 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>