Come unire due liste usando LINQ?

Come unire due elenchi utilizzando LINQ come il seguente:

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 }; } } 

Ho due liste di persone:

 list1: 1, A 2, B list2: 2, C 3, D 

Voglio il risultato come il seguente

 result: 1, A 2, BC 3, D 

Qualsiasi aiuto!

Raccomanderei fortemente di non utilizzare la concatenazione di stringhe per rappresentare queste informazioni; sarà necessario eseguire manipolazioni di stringhe non necessarie se si desidera recuperare i dati originali in seguito dall’elenco unito. Inoltre, la versione unita (così com’è) diventerà lossy se si decide di aggiungere proprietà aggiuntive alla class.

Preferibilmente, eliminare il metodo Merge e utilizzare una struttura dati appropriata come una multimap che possa mappare una raccolta di chiavi a uno o più valori. La class Lookup può servire a questo scopo:

 var personsById = list1.Concat(list2) .ToLookup(person => person.ID); 

In ogni caso, per rispondere alla domanda, è ansible concatenare le due sequenze, quindi raggruppare le persone in base al loro ID e quindi aggregare ciascun gruppo in una singola persona con il metodo Merge fornito:

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

EDIT : dopo la rilettura, appena realizzato che è necessaria una concatenazione poiché ci sono due liste.