如何使用LINQ为List中所有对象的Id属性设置连续序号
如何用LINQ为List中所有BookDetail对象设置连续Id(1到3)
首先需要明确:LINQ的核心设计是查询数据而非直接修改原有集合,但我们可以结合LINQ的索引功能来实现需求,主要有两种常见方式:
方式一:创建新的List(不修改原对象)
利用Select方法的重载版本,它会提供每个元素的索引(从0开始),我们可以基于索引生成新的BookDetail对象:
var updatedBookList = BookList.Select((book, index) => new BookDetail { Id = index + 1, // 索引从0开始,加1得到1、2、3 Title = book.Title }).ToList();
这种方式不会改变原BookList中的对象,而是生成一个全新的集合,适合不需要保留原对象引用的场景。
方式二:修改原List中的对象(原地更新)
如果需要直接修改原有集合里的对象,可以结合Enumerable.Range和索引来遍历更新:
Enumerable.Range(0, BookList.Count).ToList().ForEach(i => { BookList[i].Id = i + 1; });
或者用更直观的遍历方式(结合LINQ索引特性):
foreach (var (book, index) in BookList.Select((b, i) => (b, i))) { book.Id = index + 1; }
这两种方式都会直接修改原BookList中每个BookDetail对象的Id属性,最终得到预期的1、2、3连续序号。
验证结果
执行上述任意一种方式后,输出BookList的Id值:
foreach (var book in BookList) { Console.WriteLine(book.Id); // 依次输出1、2、3 }
内容的提问来源于stack exchange,提问作者Megrez7
相关产品推荐
相关产品推荐

