这可能是一个常见的问题,我搜索了其他问题但没有找到可行的解决方案(请注意,我的C#和linq技能有限-所以需要简单的解决方案!)。
这里是问题:
我有两个包含对象的列表。我想比较它们并返回List2中所有的新对象。
例子:
ObjectList List1; // 包含3个在数据库中存储的对象
ObjectList List2; // 包含与List1相同的3个对象和从网页添加的新对象(父对象在网页上更新)
ObjectList List3; // 应该比较List1和List2,并返回List2中的新对象(因此结果应该只是Object number 4)
注意:
顺序无关紧要,我只想要新的对象(s)
通常对象只会添加到List2。如果任何对象被删除(与List1进行比较),则应忽略它。(因此仅存在于List1中的对象不感兴趣)
感谢您提供任何建议或链接以前我在搜索中错过的问题。
编辑:
这里是第一次尝试使用Except的一个小例子(这返回了一个错误)。
我已经将它缩短了一点。该方法来自我们的软件,所以它们可能不为您所知。对此我很抱歉。
这里是问题:
我有两个包含对象的列表。我想比较它们并返回List2中所有的新对象。
例子:
ObjectList List1; // 包含3个在数据库中存储的对象
ObjectList List2; // 包含与List1相同的3个对象和从网页添加的新对象(父对象在网页上更新)
ObjectList List3; // 应该比较List1和List2,并返回List2中的新对象(因此结果应该只是Object number 4)
注意:
顺序无关紧要,我只想要新的对象(s)
通常对象只会添加到List2。如果任何对象被删除(与List1进行比较),则应忽略它。(因此仅存在于List1中的对象不感兴趣)
感谢您提供任何建议或链接以前我在搜索中错过的问题。
编辑:
这里是第一次尝试使用Except的一个小例子(这返回了一个错误)。
我已经将它缩短了一点。该方法来自我们的软件,所以它们可能不为您所知。对此我很抱歉。
// caDialogObjects = List1 (caDialogQLMLinks is the link to the objects)
RepositoryObjectList caDialogObjects = args.Object.GetConfiguration().GetObjectSet(caDialogQLMLinks);
// caObjectObjects = List2 (caObjectQLMLinks is the link to the objects)
RepositoryObjectList caObjectObjects = args.Object.GetConfiguration().GetObjectSet(caObjectQLMLinks);
// List 3
RepositoryObjectList caTotal;
caTotal = caObjectObjects.Except(caDialogObjects);
可行的解决方法
由于列表只是一个引用(而不是一个值),所以异常处理并不能奏效。可以使用第二个参数,但我得到了一个有效的 Linq 代码解决了问题:RepositoryObjectList caNewCA =
new RepositoryObjectList(caDialogObjects.Where(item1 =>
!caObjectObjects.Any(item2 => item1.Id == item2.Id)));