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

如何使用LINQ将两个不同结构的列表连接合并为指定结构的新列表

实现方案

第一步:修正类定义语法错误

你提供的result类存在语法错误,修正后完整类定义如下:

public class list1
{
    public string ID { get; set; }
}

public class list2
{
    public string ID { get; set; }
    public string Member { get; set; }
}

public class result
{
    public string ID { get; set; }
    public List<list2> list2s { get; set; }
}

第二步:LINQ关联合并实现

以下两种实现方式均可满足需求,默认保留list1的所有元素,即使list2无对应匹配项也会生成list2s为空集合的result对象:

方式1:方法语法(GroupJoin)

直接调用LINQ原生GroupJoin方法实现关联分组:

// 模拟输入数据
List<list1> list1Data = new List<list1>
{
    new list1 { ID = "a" },
    new list1 { ID = "b" },
    new list1 { ID = "c" },
    new list1 { ID = "d" }
};
List<list2> list2Data = new List<list2>
{
    new list2 { ID = "a", Member = "1" },
    new list2 { ID = "a", Member = "2" },
    new list2 { ID = "a", Member = "3" },
    new list2 { ID = "b", Member = "1" },
    new list2 { ID = "b", Member = "2" },
    new list2 { ID = "c", Member = "1" },
    new list2 { ID = "d", Member = "1" }
};

// 核心关联逻辑
List<result> resultData = list1Data
    .GroupJoin(
        list2Data,
        l1 => l1.ID,
        l2 => l2.ID,
        (l1, l2Group) => new result
        {
            ID = l1.ID,
            list2s = l2Group.ToList()
        })
    .ToList();

方式2:查询语法

可读性更高的LINQ查询写法,逻辑和GroupJoin完全等价:

List<result> resultData = (
    from l1 in list1Data
    join l2 in list2Data on l1.ID equals l2.ID into l2Group
    select new result
    {
        ID = l1.ID,
        list2s = l2Group.ToList()
    }).ToList();

结果验证

最终生成的resultData完全匹配期望结构:

  • ID为a的元素对应list2s包含Member为1、2、3的3个list2对象
  • ID为b的元素对应list2s包含Member为1、2的2个list2对象
  • ID为c的元素对应list2s包含Member为1的1个list2对象
  • ID为d的元素对应list2s包含Member为1的1个list2对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:06:03