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

如何使用LINQ基于ID合并两个不同的对象列表?

问题描述

我有两个各包含数千条记录的对象列表,简化示例如下:

LIST A [
   {"001","James","London","Accountant"},
   {"002","Laura","New York","Marketing"},
   {"003","Zack","Austin","Support"},
   {"004","Maggie","Phoenix","DevOps"}   
]

LIST B [
   {"002","09/10/2021"},
   {"004","11/24/2009"}
]

希望通过LINQ查询,基于ID(第一个字段)合并两个列表,得到如下结果:

LIST RESULT [
   {"002","Laura","New York","Marketing","09/10/2021"},
   {"004","Maggie","Phoenix","DevOps","11/24/2009"}
]

我尝试的代码未得到预期结果:

var Result = A.Where(p => B.All(p2 => p2.Id == p.Id)).ToList();
解决方案

你当前的代码逻辑错误:B.All(p2 => p2.Id == p.Id)是判断B中所有元素的Id都等于当前A元素的Id,只有当B里所有记录的Id完全一致时才会匹配,这显然不符合你的需求。

正确的做法是使用LINQ的Join方法实现内连接,匹配两个列表中Id相同的元素,再合并字段:

假设你的对象类定义如下(如果是匿名类或动态类型,逻辑一致):

public class Employee
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string City { get; set; }
    public string Position { get; set; }
}

public class DateRecord
{
    public string Id { get; set; }
    public string Date { get; set; }
}

对应的LINQ查询代码:

var result = A.Join(
    B,
    employee => employee.Id,    // A的匹配键
    record => record.Id,        // B的匹配键
    (employee, record) => new   // 合并成新对象
    {
        employee.Id,
        employee.Name,
        employee.City,
        employee.Position,
        record.Date
    }).ToList();

这段代码会将A和B中Id相同的元素配对,合并后得到你需要的结果列表。如果需要强类型对象,可以将匿名类替换为自定义的结果类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:10:25