我有两个不同的对象列表,它们有几千个条目,但为了简单起见,我们假设它们如下所示:

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"}
]

到目前为止,我已经try 了几次,但最后一次没有给我预期的结果:

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

推荐答案

您可以使用Join方法来获得预期的结果:

List<A> listA = new List<A>()
{
  new A("001", "James", "Accountant", "London"),
  new A("002", "Laura", "Marketing", "New York"),
  new A("004", "Maggie", "DevOps", "Phoenix")
};

List<B> listB = new List<B>()
{
  new B("002", "09/10/2021"),
  new B("004", "11/24/2009")
};
var result = listA.Join(listB, a => a.Id, b => b.Id, (a, b) => new
{
    a.Id,
    b.Date,
    a.Job,
    a.Name,
    a.City
}).ToList();

foreach (var item in result)
{
    Console.WriteLine($"{item.Id} {item.Name} {item.City} {item.Job} {item.Date}");
}

A班和B班:

public record A(string Id, string Name, string Job, string City);
public record B(string Id, string Date);

结果:

002 Laura New York Marketing 09/10/2021
004 Maggie Phoenix DevOps 11/24/2009

Csharp相关问答推荐

如何使用PDFSharp将文本添加到现有PDF

ASP.NET Core 8 Cors标题未显示

使用其可能实现的基类和接口的属性的方法

FileStream. FlushAsync()是否确保文件被写入磁盘?

如何注册接口类型,类型<>

XUNIT是否使用测试数据的源生成器?

获取具有AutoFaces的所有IOptions对象的集合

TCPClient阅读流

.NET SDK包中的官方C#编译器在哪里?

.NET并发词典交换值

在字符串C#之前获取数字

如何在microsoft.clearscript.v8的jsondata中使用Linq

如何正确处置所有动态控件?

使用Blazor WebAssembly提高初始页面加载时间的性能

C#System.Commandline:如何向命令添加参数以便向其传递值?

如何将 colored颜色 转换为KnownColor名称?

如何使ExecuteAsync异步运行

我想我必须手动使用res1(字符串形式的PowerShell哈希表)

将带有嵌套If-Else的Foreach循环转换为Linq表达式

异步等待,如何在Windows窗体中使用它们?