private static string ResolveExpression(this IContext c, Filter filter) {
            if (!string.IsNullOrEmpty(filter.Expression))
                return filter.Expression;

            var builder = new StringBuilder();
            var rightSide = ResolveSide(filter, "right");
            var resolvedOperator = ResolveOperator(filter.Operator);
            if (rightSide.Equals("NULL")) {
                if (filter.Operator == "=") {
                    resolvedOperator = "IS";
                }
                if (filter.Operator == "!=") {
                    resolvedOperator = "IS NOT";
                }
            }

            builder.Append(ResolveSide(filter, "left"));
            builder.Append(" ");
            builder.Append(resolvedOperator);
            builder.Append(" ");
            builder.Append(rightSide);

            var expression = builder.ToString();
            c.Info("Filter: {0}", expression);
            return expression;
        }
        private static string ResolveSide(Filter filter, string side) {

            bool isField;
            string value;
            bool otherIsField;
            Field otherField;

            if (side == "left") {
                isField = filter.LeftIsField;
                value = filter.Left;
                otherIsField = filter.RightIsField;
                otherField = filter.RightField;
            } else {
                isField = filter.RightIsField;
                value = filter.Right;
                otherIsField = filter.LeftIsField;
                otherField = filter.LeftField;
            }

            if (isField)
                return SqlConstants.L + value + SqlConstants.R;

            if (value.Equals("null", StringComparison.OrdinalIgnoreCase))
                return "NULL";

            if (!otherIsField) {
                double number;
                if (double.TryParse(value, out number)) {
                    return number.ToString(CultureInfo.InvariantCulture);
                }
                return SqlConstants.T + value + SqlConstants.T;
            }

            if (SqlConstants.StringTypes.Any(st => st == otherField.Type)) {
                return SqlConstants.T + value + SqlConstants.T;
            }
            return value;
        }