public bool Equals(CanDbDetails x, CanDbDetails y)
        {
            var networkNodeComparer = new NetworkNodeListItemComparer();
            var messageComparer     = new MessageListItemComparer();

            var areEqual = x.OriginalFileName.Equals(y.OriginalFileName) &&
                           x.Messages
                           .All(
                xMessage => y
                .Messages
                .Any(yMessage => messageComparer.Equals(xMessage, yMessage))
                ) &&
                           x.NetworkNodes
                           .All(
                xNetworkNode => y
                .NetworkNodes
                .Any(yNetworkNode => networkNodeComparer.Equals(xNetworkNode, yNetworkNode))
                );

            return(areEqual);
        }
        public int GetHashCode([DisallowNull] CanDbDetails obj)
        {
            var networkNodeComparer = new NetworkNodeListItemComparer();
            var messageComparer     = new MessageListItemComparer();

            // CreateTimeStamp is not included as comparison argument
            var hashCode = HashCode.Combine(
                obj.OriginalFileName
                );

            foreach (var networkNode in obj.NetworkNodes)
            {
                hashCode = HashCode.Combine(hashCode, networkNodeComparer.GetHashCode(networkNode));
            }

            foreach (var message in obj.Messages)
            {
                hashCode = HashCode.Combine(hashCode, messageComparer.GetHashCode(message));
            }

            return(hashCode);
        }