Я бы настоятельно рекомендовал не использовать конкатенацию строк для представления этой информации; вам нужно будет выполнить ненужные манипуляции со строками, если вы хотите получить исходные данные позже из объединенного списка. Кроме того, объединенная версия (в том виде, в каком она есть) станет потерянной, если вы когда-нибудь решите добавить дополнительные свойства в класс.
Предпочтительно, избавьтесь от метода 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();
РЕДАКТИРОВАТЬ : Перечитав, только что понял, что требуется объединение, поскольку существует два списка.