You can copy them to HashSet<T> and then do all the possible Set theory operations on them like Union, Intersection, etc. without writing the code for it yourself.
HashSet<T> has a parameterized constructor that accepts an IEnumerable<T>, so you can copy the data easily.
HashSet<Foo> hashSet1 = new HashSet<Foo>(myObservableCollection1); HashSet<Foo> hashSet2 = new HashSet<Foo>(myObservableCollection2); hashSet1.UnionWith(hashSet2); hashSet1.IntersectionWith(hashSet2);
and so on.