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

如何用LINQ/C#将对象的嵌套列表转为独立列表并关联原对象

实现方案

方法一:LINQ 简洁实现

利用SelectMany扁平化嵌套集合,同时为每个ObjectB关联对应的ObjectA:

// 假设你已有的ObjectA集合
List<ObjectA> objectAList = GetYourObjectAList();

// 提取并关联所有ObjectB
List<ObjectB> allObjectBs = objectAList
    .SelectMany(a => a.ObjectBs? // 空条件运算符避免空引用
        .Select(b => 
        {
            b.ObjectA = a;
            b.ObjectAId = a.Id; // 可选:确保ObjectAId与对应ObjectA的Id一致
            return b;
        }))
    .Where(b => b != null) // 过滤可能的空元素
    .ToList();

方法二:传统循环实现

如果更倾向直观的控制逻辑,用嵌套循环完成:

List<ObjectA> objectAList = GetYourObjectAList();
List<ObjectB> allObjectBs = new List<ObjectB>();

foreach (var objectA in objectAList)
{
    // 跳过空的ObjectBs集合,避免空引用异常
    if (objectA.ObjectBs == null)
        continue;

    foreach (var objectB in objectA.ObjectBs)
    {
        objectB.ObjectA = objectA;
        objectB.ObjectAId = objectA.Id; // 可选:同步ID
        allObjectBs.Add(objectB);
    }
}

注意事项

  • 上述代码是引用修改:直接修改原ObjectB对象的关联属性,如果需要保留原对象不变,需创建ObjectB的副本(克隆):
    // 克隆ObjectB示例
    .SelectMany(a => a.ObjectBs.Select(b => new ObjectB
    {
        Id = b.Id,
        Name = b.Name,
        ObjectAId = a.Id,
        ObjectA = a
    }))
    
  • 若原数据中ObjectB的ObjectAId已经与对应ObjectA的Id匹配,仅需赋值ObjectA属性即可,无需同步ObjectAId。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:07:21