需要帮助加入C#中的两个对象列表

时间:2012-05-21 04:22:47

标签: c# linq

使用我的两个对象列表,我想基于字符串键保留唯一项目的总集合,其中任何冲突来自第一个列表,任何未命中都来自第二个。换句话说,我想忽略第一个列表中不在第二个列表中的任何项目,但我想保留第二个列表中存在的所有项目以及第二个列表中的任何剩余项目。

最好的方法是什么?

编辑:这个问题比简单的联合更微妙。联盟将加入两个列表中的不同项目。在发生碰撞的情况下,它从外部列表中获取该项目。

在我的情况下,我在List1中有一些我不想保留的项目,因为它们在List2中不存在,而我确实希望保留列表2中的所有项目。

是否有更清洁/更短的方式来执行以下操作?

var remaining = allowedItems.Except(recentItems)
var allowedRecentItems = recentItems.Intersect(allowedItems)
var result = allowedRecentItems.Concat(remaining);

4 个答案:

答案 0 :(得分:2)

试试这个:

var resultlist = list1.Union(list2);

答案 1 :(得分:0)

var list1 = new List<string>{"A", "B", "C"};
var list2 = new List<string>{"B", "C", "D"};
var list = list1.Union(list2);

答案 2 :(得分:0)

使用第二个列表就可以了。直接翻译您的要求会产生: list1.Intersect(list2).Union(list2)结果列表2

答案 3 :(得分:0)

如果我理解正确 - 你应该只保留第二个清单。由此你的两个条件都得到了满足

  
      
  • 我想忽略第一个列表中不在第二个列表中的任何项目
  •   
如果仅保留第二个列表,则

偏离路线然后将自动忽略第一个列表中不存在于第二个列表中的所有项目。

  
      
  • 我想保留第二个列表中存在的所有项目以及第二个列表中的所有剩余项目
  •   

另一方面,将自动选择两个列表中的项目,包括仅出现在第二个列表中的项目。

如果这不是您想要的,那么您应该检查List.Distinct()List.Except()List.Union()扩展方法。