如何使用 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
任何帮助!
我强烈建议不要使用字符串连接来表示此信息;如果您想稍后从合并列表中获取原始数据,您将需要执行不必要的字符串操作。此外,如果您决定向类添加其他属性,则合并版本(按目前的情况)将变得有损。
最好摆脱Merge
方法并使用适当的数据结构,例如多重映射,每个映射都可以将一组键映射到一个或多个值。这Lookup<TKey, TElement> http://msdn.microsoft.com/en-us/library/bb460184.aspx类可以达到这个目的:
var personsById = list1.Concat(list2)
.ToLookup(person => person.ID);
无论如何,要回答所提出的问题,您可以连接两个序列,然后按人员分组ID
然后将每个组聚合成一个single提供的人Merge
method:
var mergedList = list1.Concat(list2)
.GroupBy(person => person.ID)
.Select(group => group.Aggregate(
(merged, next) => merged.Merge(next)))
.ToList();
EDIT:重新阅读后,才意识到需要串联,因为有two lists.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)