public bool CompareExpression(IExpression expression, Dictionary<string, object> properties) { if (expression == null) return true; var expressionType = expression.GetTypeOfObj(); if (expressionType.IsTypeOf<Condition>()) return CompareCondition(expression.CastObj<Condition>(), properties); if (expressionType.IsTypeOf<Junction>()) return CompareJunction(expression.CastObj<Junction>(), properties); throw new Exception(string.Format("Unknown {0} implementation : {1}", typeof(IExpression).FullName, expressionType.FullName)); }