C# LINQ比较两个列表-添加新列表、删除旧列表和保留相同的列表

C# LINQ比较两个列表-添加新列表、删除旧列表和保留相同的列表,c#,linq,list,C#,Linq,List,我有一个对象的两个列表(L1,L2),L1用于存储对象列表(多对多关系),然后再进行更改。L2是更改后的关系。我需要保留公共元素,但添加新元素并删除L2中不存在的元素。我想知道是否有一个班轮,我可以用LINQ来完成这一点。如果你需要更多的信息,请告诉我 提前感谢如果我正确理解了您的要求,这应该可以: L1.AddRange(L2.Except(L1)); L1.RemoveAll(item => !L2.Contains(item)); 不是一条直线,但足够近…试试这样的东西 var a

我有一个对象的两个列表(L1,L2),L1用于存储对象列表(多对多关系),然后再进行更改。L2是更改后的关系。我需要保留公共元素,但添加新元素并删除L2中不存在的元素。我想知道是否有一个班轮,我可以用LINQ来完成这一点。如果你需要更多的信息,请告诉我


提前感谢

如果我正确理解了您的要求,这应该可以:

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

不是一条直线,但足够近…

试试这样的东西

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

也许Linq的诸如Intersect()之类的布尔运算符可以对您有所帮助?

您不想替换整个列表的原因是什么?这可能会更快。也许我误解了,但你不是在要求L2中存储的对象集吗?使用一个具体的例子,如果您有以下输入:L1:{1,2,3,4,5}L2:{2,3,5,7}不是期望的结果{2,3,5,7}?递归:当我不得不这样做时,它是更新一个
可观察集合
——你不想仅仅因为几行发生了变化就重新绑定数据网格中的每个单元格。是的,但它适用于多对多关系,我希望能够保留当前的关系,而不是擦除和创建新的关系。我用的是Nhibernate和Castle ActiveRecord