How does LINQ Except work?

gunnerz picture gunnerz · Sep 18, 2012 · Viewed 59.1k times · Source

Possible Duplicate:
LINQ find differences in two lists

I want to find a difference between 2 series. So I am using Except in the LINQ statement. But Except seems to work only when the first collection is longer than the second. For example this will not return any result, even though the 2 collections are different.

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

IEnumerable<double> onlyInFirstSet = numbers2.Except(numbers1);

Can anyone confirm if this is the case? If so, do I have to check the collection lengths before I write the query, because I do not know which collection will be bigger at compile time.

Edit

I think I was not clear in my question. I do not care which collection contains what. I just want to find difference between 2 collections. How can I do this?

Answer

user1026130 picture user1026130 · Sep 18, 2012

Taken from 101 LINQ Samples:

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); 
}

Result

Numbers in first array but not second array: 0 2 4 6 9