使用LINQ获取两个列表之间的差异

gul*_*aek 28 .net c# linq list

我有两个列表,我需要比较它们,只返回不同时列出的项目列表.

var listOfIds = new List<int> {1,2,4};

var persons = new ObservableCollection<Person>
{
    new Person {Id = 1, Name = "Person 1"},
    new Person {Id = 2, Name = "Person 2"},
    new Person {Id = 3, Name = "Person 3"},
    new Person {Id = 4, Name = "Person 4"}
};
Run Code Online (Sandbox Code Playgroud)

在这个例子new Person {Id = 3, Name = "Person 3"}中将是结果.Linq解决方案将是首选.

Pra*_*ana 39

不会为你工作

var listOfIds = new List<int> {1,2,4};

var query = from item in persons 
            where !listOfIds .Contains( item.id )
            select item;
Run Code Online (Sandbox Code Playgroud)

您可以查看更多详细信息:SQL到LINQ(案例7 - 使用IN和NOT IN子句过滤数据)

  • 有一个函数可以做到这一点,“Except”,它不仅更干净,而且速度更快。 (3认同)

Moh*_*bed 34

你也可以使用lambda:

var query = persons.Where(item => !listOfIds.Contains(item.Id));
Run Code Online (Sandbox Code Playgroud)


Kri*_*ton 5

var list1 = new List<int> {1,2,3,4,5};
var list2 = new List<int> {2,3,4,5,6};

list1.Except(list2); //1 - items removed
list2.Except(list1); //6 - items added
Run Code Online (Sandbox Code Playgroud)