Compare collections of complex objects in C#