So far, reflection seems to be the only way to dynamically check if two objects are the same. You would do this by iterating through the object's members and checking for which ones contain a different value. However, research has told me that reflection is bad on performance when used this way.
If someone can confirm here whether or not reflection is indeed not a good choice for what I need to do, perhaps there is an alternative?
Note that, whatever route I go, I need the solution to be dynamic. This means no overriding of Equals and then comparing each property one by one. If it's dynamic, I can write one method that will work for all types.