You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否有LINQ方法可按数量将2个LineItem条目扩展为N个?

解决方案

你要的简洁LINQ写法可以用SelectMany搭配Enumerable.Repeat实现,一行代码就能完成原来的循环逻辑:

var bag = list.SelectMany(item => Enumerable.Repeat(item, item.Quantity)).ToList();

逻辑说明

  • Enumerable.Repeat(item, item.Quantity) 会针对每个条目生成一个包含Quantity个相同条目对象的序列
  • SelectMany 会把所有条目生成的序列摊平,合并成一个单一的LineItem集合
  • 不需要单独判断Quantity == 1的情况,Repeat次数为1时会天然只返回一个元素,完全兼容原有逻辑

完整测试代码示例

var list = new List<LineItem>{
    new LineItem { Info = "two of these", Quantity = 2 },
    new LineItem { Info = "one of these", Quantity = 1 }
};
        
// 原始打印
foreach( var entry in list) Console.WriteLine(entry);

Console.WriteLine("now I want three lines printed as for the shopping bag");

// LINQ实现展开
var bag = list.SelectMany(item => Enumerable.Repeat(item, item.Quantity)).ToList();

// 打印展开后的结果
foreach( var entry in bag) Console.WriteLine(entry);

运行后输出和你原有代码完全一致。

注意:如果后续需要修改展开后的单个条目属性,避免所有重复条目一起变动,需要在生成序列时新建LineItem对象,写法调整如下:

var bag = list.SelectMany(item => 
                Enumerable.Range(1, item.Quantity)
                          .Select(_ => new LineItem { 
                              Info = item.Info, 
                              Quantity = item.Quantity 
                          }))
              .ToList();

内容的提问来源于stack exchange,提问作者kenny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:06:04