Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ获取两个列表之间的差异_C#_.net_Linq_List - Fatal编程技术网

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

C# 使用LINQ获取两个列表之间的差异,c#,.net,linq,list,C#,.net,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

我有两个列表,我需要比较它们,只返回一个项目列表,而不是两个列表

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"}
};
var listOfIds=新列表{1,2,4};
var persons=新的可观察集合
{
新人{Id=1,Name=“Person 1”},
新人{Id=2,Name=“Person 2”},
新人{Id=3,Name=“Person 3”},
新人{Id=4,Name=“Person 4”}
};
在本例中,
newperson{Id=3,Name=“Person 3”}
将是结果。
最好是Linq解决方案。

不在将适合您

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

var query = from item in persons 
            where !listOfIds .Contains( item.id )
            select item;
var listOfIds=新列表{1,2,4};
var query=来自个人中的项目
哪里listOfIds.Contains(item.id)
选择项目;

您可以查看更多详细信息:

您也可以使用lambda:

var query = persons.Where(item => !listOfIds.Contains(item.Id));
使用C#中的Linq,您可以执行以下变量,从而获得相同的结果:

int[] numbers1 = { 1,2,3,4 };
int[] numbers2 = { 3,4,5,6 };

// Ac V Bc, thus complement of A plus the complement of B
IEnumerable<int> differencesVariant1 = 
numbers1.Except(numbers2).Union(numbers2.Except(numbers1));

// (A V b)c, thus complement of (set A plus set B)
IEnumerable<int> differencesVariant2 = 
numbers1.Union(numbers2).Except(numbers1.Intersect(numbers2));

Console.WriteLine("variant 1:");
foreach (int number in differencesVariant1)
    Console.WriteLine(number);   // prints: 1,2,5,6

Console.WriteLine("variant 2:");
foreach (int number in differencesVariant2)
    Console.WriteLine(number);   // prints: 1,2,5,6
int[]numbers1={1,2,3,4};
int[]numbers2={3,4,5,6};
//Ac V Bc,因此A的补码加上B的补码
IEnumerable differenceVariant1=
数字1.例外(数字2).联合(数字2.例外(数字1));
//(A V b)c,因此是(集合A加集合b)的补码
IEnumerable differenceVariat2=
数字1.并集(数字2).除了(数字1.相交(数字2));
控制台写入线(“变体1:”);
foreach(差异变量1中的整数)
控制台。写入线(编号);//印刷品:1,2,5,6
控制台写入线(“变体2:”);
foreach(差分变量2中的整数)
控制台。写入线(编号);//印刷品:1,2,5,6
var list1=新列表{1,2,3,4,5};
var list2=新列表{2,3,4,5,6};
清单1.除(清单2)外//1-删除的项目
清单2.除(清单1)外//6-新增项目

非常感谢,总是忘了怎么做:-)这有一个功能,
除了
,它不仅更干净,而且速度更快。
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