如何使用LINQ合并两个列表?

如何使用LINQ合并两个列表,如下所示:

class Person { public int ID { get; set;} public string Name { get; set;} public Person Merge( Person p) { return new Person { ID = this.ID, Name = this.Name + " " + p.Name }; } } 

我有两个人名单:

 list1: 1, A 2, B list2: 2, C 3, D 

我希望得到如下结果

 result: 1, A 2, BC 3, D 

任何帮助!

我强烈建议不要使用字符串连接来表示这些信息; 如果要稍后从合并列表中获取原始数据,则需要执行不必要的字符串操作。 此外,如果您决定在课程中添加其他属性,则合并后的版本(如图所示)将变得有损。

优选地,去除Merge方法并使用适当的数据结构,例如多图,每个图可以将一组键映射到一个或多个值。 Lookup类可以实现此目的:

 var personsById = list1.Concat(list2) .ToLookup(person => person.ID); 

无论如何,要回答问题,您可以连接两个序列,然后按ID分组,然后使用提供的Merge方法将每个组聚合成一个人:

 var mergedList = list1.Concat(list2) .GroupBy(person => person.ID) .Select(group => group.Aggregate( (merged, next) => merged.Merge(next))) .ToList(); 

编辑 :重新阅读,只是意识到需要连接,因为有两个列表。