仅将新项目从一个列表添加到另一个列表

时间:2010-08-11 18:45:12

标签: c# asp.net linq

我有两个清单:

List<string> _list1;
List<string> _list2;

我需要在_list1上添加所有_list2不同的项目......

如何使用LINQ做到这一点?

由于

3 个答案:

答案 0 :(得分:11)

您可以使用IEnumerable<T>.Union方法:

var _list1 = new List<string>(new[] { "one", "two", "three", "four" });
var _list2 = new List<string>(new[] { "three", "four", "five" });

_list1 = _list1.Union(_list2);

// _distinctItems now contains one, two, three, four, five

修改

您也可以使用其他帖子使用的方法:

_list1.AddRange(_list2.Where(i => !_list1.Contains(i));

这两种方法都会增加开销。

第一种方法使用新的List来存储Union结果(然后将它们分配回_list1)。

第二种方法是创建Where的内存表示,然后将它们添加到原始List中。

选择你的毒药。在我看来,Union使代码更清晰(因此值得增加开销,至少在你能证明它成为一个问题之前)。

答案 1 :(得分:9)

list1.AddRange(list1.Except(list2));

答案 2 :(得分:5)

_list1.AddRange( _list2.Where(x => !_list1.Contains(x) ) );