我有两个清单:
List<string> _list1;
List<string> _list2;
我需要在_list1上添加所有_list2不同的项目......
如何使用LINQ做到这一点?
由于
答案 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) ) );