【问题标题】:How to merge two lists using LINQ?如何使用 LINQ 合并两个列表?
【发布时间】:2011-02-02 09:55:47
【问题描述】:

如何使用 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

任何帮助!

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    我强烈建议不要使用字符串连接来表示此信息;如果您想稍后从合并列表中取回原始数据,则需要执行不必要的字符串操作。此外,如果您决定向类添加其他属性,合并后的版本(就目前而言)将变得有损。

    最好摆脱Merge 方法并使用适当的数据结构,例如可以将一组键映射到一个或多个值的多重映射。 Lookup<TKey, TElement> 类可以达到这个目的:

    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();
    

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

    【讨论】:

    • 感谢您的建议,但发布的代码只是想法的示例,不是我的真实代码。
    猜你喜欢
    • 1970-01-01
    • 2016-09-12
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多