【问题标题】:Auto-incrementing a generic list using LINQ in C#在 C# 中使用 LINQ 自动递增通用列表
【发布时间】:2011-10-14 08:21:52
【问题描述】:

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

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

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

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

【问题讨论】:

  • 一般来说,您可以使用 Enumerable.Range(1, numOfItems) 生成一个新的递增枚举,但在您的情况下,使用 Select 重载是更好的选择。

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


【解决方案1】:

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

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

【讨论】:

  • 从 1 而不是 0 开始最有效的方法是什么?
  • 我应该先尝试一下!我认为可能有一种方法可以设置身份种子值。再次感谢达林。
【解决方案2】:

您可以使用overload of Select,它也为投影提供索引:

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

请注意,此重载不支持查询表达式。如果您实际上是从数据库中获取值(尚不清楚list 是否真的是List<T>),您可能应该确保您有适当的排序,否则结果有些随意。

【讨论】:

    猜你喜欢
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2011-03-04
    • 2015-11-10
    • 2011-09-25
    • 2016-03-07
    • 1970-01-01
    相关资源
    最近更新 更多