LINQ Сравнение двух списков - добавьте новые, удалите старые, оставьте общие

У меня есть два списка (L1, L2) объекта A, L1 используется для хранения списка объектов (от многих до многих отношений) до их изменения. L2 - это соотношение после его изменения. Мне нужно сохранить общие элементы, но добавить новые и удалить те, которые не находятся в L2. Мне было интересно, есть ли один liner, который я мог бы использовать с LINQ, чтобы выполнить это. Если вам нужна дополнительная информация, просто дайте мне знать.

Заранее спасибо

Ответ 1

Если я правильно понял ваши требования, это должно работать:

L1.AddRange(L2.Except(L1));
L1.RemoveAll(item => !L2.Contains(item));

Не однострочный, но достаточно близко...

Ответ 2

попробуйте что-то вроде этого

var a = from ele in list1
        let alleles = list1.Union(list2)
        let deleles = alleles.Except(list1)
        let neweles = alleles.Except(list2)
        select new { DeletedEles = deleles, NewEles = neweles };

Ответ 3

Возможно, логические операторы Linq, такие как Intersect(), могут вам помочь?