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

Pau*_*aul 3 c# linq asp.net

我有两个清单:

List<string> _list1;
List<string> _list2;
Run Code Online (Sandbox Code Playgroud)

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

我怎么能用LINQ做到这一点?

谢谢

Jus*_*ner 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
Run Code Online (Sandbox Code Playgroud)

编辑

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

_list1.AddRange(_list2.Where(i => !_list1.Contains(i));
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


Lee*_*Lee 9

// Add all items from list2 except those already in list1
list1.AddRange(list2.Except(list1));
Run Code Online (Sandbox Code Playgroud)

  • +1我相信这比卡洛斯回答要快得多.(见他的回答评论) (3认同)

Car*_*ñoz 5

_list1.AddRange( _list2.Where(x => !_list1.Contains(x) ) );
Run Code Online (Sandbox Code Playgroud)