LINQ除了如何工作?

gun*_*erz 31 linq except

可能重复:
LINQ在两个列表中找到差异

我想找到2系列之间的区别.所以我Except在LINQ语句中使用.但Except似乎只有在第一个集合长于第二个集合时才有效.例如,即使2个集合不同,也不会返回任何结果.

double[] numbers1 = { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
double[] numbers2 = { 2.2 };

IEnumerable<double> onlyInFirstSet = numbers2.Except(numbers1);
Run Code Online (Sandbox Code Playgroud)

任何人都可以确认是否是这种情况?如果是这样,在编写查询之前是否必须检查集合长度,因为我不知道哪个集合在编译时会更大.

编辑

我想我的问题并不清楚.我不关心哪个集合包含什么.我只是想找到两个系列之间的区别.我怎样才能做到这一点?

小智 49

取自101 LINQ样品:

int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; 
int[] numbersB = { 1, 3, 5, 7, 8 }; 

IEnumerable<int> aOnlyNumbers = numbersA.Except(numbersB); 

Console.WriteLine("Numbers in first array but not second array:"); 
foreach (var n in aOnlyNumbers) 
{ 
    Console.WriteLine(n); 
}
Run Code Online (Sandbox Code Playgroud)

结果

第一个数组中的数字但不是第二个数组:0 2 4 6 9


Jim*_* G. 10

例如,这不会返回任何结果......

那是对的.

2.2 存在于第一个集合中,因此没有任何东西可以返回.

它与数组的长度无关.


Was*_*asp 5

其他答案告诉您如何从另一组数字中删除一组数字。阅读您的问题,我想您想知道第一个是什么,而不是第二个,反之亦然:

var numbers1 = new [] { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
var numbers2 = new [] { 2.2, 2.8 };

var intersect = numbers1.Intersect(numbers2);
var diff = numbers1.Concat(numbers2).Except(intersect);
Run Code Online (Sandbox Code Playgroud)