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

如何按ProductID合并ProductDMList中相同ID的CabinetList?

按ProductID合并列表对象的实现方案

你目前有这样一组原始数据(JSON格式):

{ "ProductDMList": [ { "ProductID" : 1, "CabinetList": [ { "Min" : 1, "Max" : 12 } ] }, { "ProductID" : 1, "CabinetList": [ { "Min" : 16, "Max" : 100 } ] } ] }

生成这个列表的代码如下:

List<ProductDM> productDMList = _orderRepo.GetSuggestedList(23, 12); 
for (int i=0;i<productDMList.Count;i++) 
{ 
    productDMList[i].CabinetList.Add(new InventoryDM { Min = productDMList[i].Min, Max = productDMList[i].Max }); 
} 

public class ProductDM 
{ 
    public List<InventoryDM> CabinetList { get; set; } 
    public int ProductID { get; set; } 
    public double Min { get; set; } 
    public double Max { get; set; } 
} 

public class InventoryDM 
{ 
    public Double Min { get; set; } 
    public Double Max { get; set; } 
}

你希望合并相同ProductID的对象,把它们的CabinetList合并成一个,预期输出是:

{ "ProductDMList": [ { "ProductID" : 1, "CabinetList": [ { "Min" : 1, "Max" : 12 }, { "Min" : 16, "Max" : 100 } ] } ] }

你尝试过AddRange()和Concat()但没得到预期结果,下面是具体的实现方法:


解决方案:使用LINQ分组合并

你可以利用LINQ的GroupBy方法先按ProductID分组,然后对每个分组创建一个新的ProductDM对象,把分组内所有对象的CabinetList合并进去。具体代码如下:

// 假设你已经有了原始的productDMList
var mergedList = productDMList
    // 按ProductID分组,把相同ID的对象归为一组
    .GroupBy(p => p.ProductID)
    // 对每个分组处理,生成合并后的ProductDM
    .Select(group => new ProductDM
    {
        ProductID = group.Key,
        // 展开并合并分组内所有对象的CabinetList
        CabinetList = group.SelectMany(p => p.CabinetList).ToList(),
        // 按需处理Min/Max字段:这里取分组内的最小Min和最大Max,你也可以根据业务调整逻辑
        Min = group.Min(p => p.Min),
        Max = group.Max(p => p.Max)
    })
    .ToList();

代码细节解释:

  1. GroupBy(p => p.ProductID):将原始列表中ProductID相同的对象归类到同一组,每组的Key就是对应的ProductID。
  2. SelectMany(p => p.CabinetList):把分组内每个对象的CabinetList展开成一个连续的元素序列,再转成List,就是合并后的完整CabinetList。
  3. Min/Max字段处理:如果你的业务不需要保留这两个字段,可以直接删除;如果需要,示例中取了分组内的极值,你也可以改成取第一个对象的Min/Max,或者其他符合需求的逻辑。

为什么之前的AddRange/Concat没生效?

大概率是你没有先按ProductID做分组,直接调用这两个方法的话,无法区分哪些对象属于同一ID,自然没法精准合并对应的子列表。先分组再合并,才能确保相同ID的对象的CabinetList被正确整合。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:11:07