如何使用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, B C
3, D
任何帮助!
答案 0 :(得分:19)
我强烈建议不要使用字符串连接来表示这些信息;如果要稍后从合并列表中获取原始数据,则需要执行不必要的字符串操作。此外,如果您决定在课程中添加其他属性,合并后的版本(如图所示)将会变得有损。
优选地,摆脱Merge
方法并使用适当的数据结构,例如多图,每个图可以将一组键映射到一个或多个值。 Lookup<TKey, TElement>
类可以实现此目的:
var personsById = list1.Concat(list2)
.ToLookup(person => person.ID);
无论如何,要回答问题,您可以连接两个序列,然后按ID
对人进行分组,然后将每个组聚合成一个单人,并提供Merge
1}}方法:
var mergedList = list1.Concat(list2)
.GroupBy(person => person.ID)
.Select(group => group.Aggregate(
(merged, next) => merged.Merge(next)))
.ToList();
编辑:重新阅读后,您才意识到需要连接,因为有两个列表。