Zdecydowanie polecam, aby nie używać łączenia ciągów do reprezentowania tych informacji; będziesz musiał wykonać niepotrzebne manipulacje ciągami, jeśli chcesz odzyskać oryginalne dane z późniejszej listy. Dodatkowo wersja scalona (w jej stanie) stanie się stratna, jeśli zdecydujesz się dodać dodatkowe właściwości do klasy.
Najlepiej pozbyć się metody Merge
i użyć odpowiedniej struktury danych, takiej jak multimapa, która może mapować kolekcję kluczy na jedną lub więcej wartości. Klasa Lookup<TKey, TElement>
może służyć temu celowi:
var personsById = list1.Concat(list2)
.ToLookup(person => person.ID);
W każdym razie, aby odpowiedzieć na pytanie, jak poprosił, można złączyć dwie sekwencje, następnie grupa osób przez ich ID
a następnie zsumować każdą grupę do pojedynczy osoba z dostarczonego Merge
metody:
var mergedList = list1.Concat(list2)
.GroupBy(person => person.ID)
.Select(group => group.Aggregate(
(merged, next) => merged.Merge(next)))
.ToList();
EDIT: po ponownym czytaniu, po prostu sobie sprawę, że Konkatenacja jest wymagana, ponieważ istnieją dwie listy.
Dzięki za poradę, ale opublikowany kod to tylko próbka dla pomysłu, a nie mój prawdziwy kod. – Homam