public int Compare(SoodaObject dbo1, SoodaObject dbo2)
        {
            object v1 = dbo1.Evaluate(_propertyChain, false);
            object v2 = dbo2.Evaluate(_propertyChain, false);

            if (_sortOrder == SortOrder.Ascending)
                return DoCompare(v1, v2, dbo1, dbo2);
            else
                return -DoCompare(v1, v2, dbo1, dbo2);
        }
        public int Compare(SoodaObject dbo1, SoodaObject dbo2)
        {
            foreach (FieldCompareInfo fci in fields)
            {
                object v1 = dbo1.Evaluate(fci.propertyChain, false);
                object v2 = dbo2.Evaluate(fci.propertyChain, false);

                int result = DoCompare(v1, v2);
                if (result != 0)
                {
                    if (fci.sortOrder == SortOrder.Ascending)
                        return result;
                    else
                        return -result;
                }
            }

            return PrimaryKeyCompare(dbo1, dbo2);
        }