You can use Except method which will give you every item from p2Coll
that is not in p1Coll
.
var diff = p2Coll.Except(p1Coll);
UPDATE (some performance testing):
Disclaimer:
Actual time depends upon multiple factors (such as content of collections, hardware, what's running on your machine, amount of hashcode collisions etc.) that's why we have complexity and Big O notation (see Daniel Brückner comment).
Here is some performance stats for 10 runs on my 4 years old machine:
Median time for Any(): 6973,97658ms
Median time for Except(): 9,23025ms
Source code for my test is available on gist.
UPDATE 2:
If you want to have different items from both first and second collection you have to actually do Expect on both and that Union the result:
var diff = p2Coll.Except(p1Coll).Union(p1Coll.Except(p2Coll));