小编Kim*_*Kim的帖子

C#比较两个列表,返回列表2中的新项目

这可能是一个常见的问题,我在没有找到有效的解决方案的情况下搜索了其他问题(注意,我在C#和linq方面的技能是有限的 - 所以一个简单的解决方案将不胜感激!).

这是问题:

我有两个对象列表.我想比较它们并返回list2中的所有NEW对象.

例:

ObjectList List1; //包含存储在数据库中的3个对象

ObjectList List2; //包含与List1中相同的3个对象和从网页添加的新对象(父对象已在网页上更新)

ObjectList List3; //应该对List1和List2进行比较,并返回List2中的NEW对象(因此结果应该只是对象编号4)

注意:

  • 订单无关紧要.我只想要新对象
  • 通常,对象仅添加到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);
Run Code Online (Sandbox Code Playgroud)

有效的解决方案 由于列表只是一个引用(不是值),因此Exception不起作用.可以使用第二个参数,但我得到了一个有效的linq代码:

RepositoryObjectList caNewCA = 
    new RepositoryObjectList(caDialogObjects.Where(item1 => 
         !caObjectObjects.Any(item2 => item1.Id == item2.Id)));
Run Code Online (Sandbox Code Playgroud)

c# compare list

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

c# ×1

compare ×1

list ×1