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

Hom*_*mam 12 c# 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 };
    } 
}
Run Code Online (Sandbox Code Playgroud)

我有两个人名单:

list1:
1, A
2, B

list2: 
2, C
3, D
Run Code Online (Sandbox Code Playgroud)

我希望结果如下

result: 
1, A
2, B C
3, D
Run Code Online (Sandbox Code Playgroud)

任何帮助!

Ani*_*Ani 19

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

优选地,摆脱该Merge方法并使用适当的数据结构,例如多图,每个图可以将一组键映射到一个或多个值.该Lookup<TKey, TElement>课程可以达到这个目的:

var personsById = list1.Concat(list2)
                       .ToLookup(person => person.ID);
Run Code Online (Sandbox Code Playgroud)

总之,要回答这个问题的询问,您可以连接两个序列,然后按自己的人ID,然后汇总各组为人与所提供的Merge方法:

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

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