Je vous déconseille fortement d'utiliser la concaténation de chaînes pour représenter cette information; vous devrez effectuer une manipulation de chaîne inutile si vous souhaitez récupérer les données d'origine ultérieurement dans la liste fusionnée. De plus, la version fusionnée (telle quelle) deviendra perdante si vous décidez d'ajouter des propriétés supplémentaires à la classe.
De préférence, supprimez la méthode Merge
et utilisez une structure de données appropriée telle qu'un multimap qui peut mapper une collection de clés à une ou plusieurs valeurs. La classe Lookup<TKey, TElement>
peut servir à cette fin:
var personsById = list1.Concat(list2)
.ToLookup(person => person.ID);
Quoi qu'il en soit, pour répondre à la question posée, vous pouvez concaténer les deux séquences, puis les personnes du groupe par leur ID
puis agrègent chaque groupe dans un unique personne avec la méthode fournie Merge
:
var mergedList = list1.Concat(list2)
.GroupBy(person => person.ID)
.Select(group => group.Aggregate(
(merged, next) => merged.Merge(next)))
.ToList();
EDIT: Lors de la relecture, vient de réaliser qu'un la concaténation est requise car il existe deux listes.
Merci pour le conseil, mais le code posté est juste un échantillon pour l'idée, pas mon vrai code. – Homam