internal int Compare(ObjectCommandPropertyValue first, ObjectCommandPropertyValue second)
 {
     if (first.IsExistingProperty && second.IsExistingProperty)
     {
         return(Compare(first.PropertyValue, second.PropertyValue));
     }
     // if first.IsExistingProperty, !second.IsExistingProperty; otherwise the
     // first branch if would return. Regardless of key orders non existing property
     // will be considered greater than others
     if (first.IsExistingProperty)
     {
         return(-1);
     }
     // viceversa for the first.IsExistingProperty
     if (second.IsExistingProperty)
     {
         return(1);
     }
     //both are nonexisting
     return(0);
 }
 internal int Compare(ObjectCommandPropertyValue first, ObjectCommandPropertyValue second)
 {
     if (first.IsExistingProperty && second.IsExistingProperty)
     {
         return Compare(first.PropertyValue, second.PropertyValue);
     }
     // if first.IsExistingProperty, !second.IsExistingProperty; otherwise the
     // first branch if would return. Regardless of key orders non existing property
     // will be considered greater than others
     if (first.IsExistingProperty)
     {
         return -1;
     }
     // viceversa for the first.IsExistingProperty
     if (second.IsExistingProperty)
     {
         return 1;
     }
     //both are nonexisting
     return 0;
 }