public bool ValidateOperand2BasedOnOperand1Type(AttributeTypeCode operand1Type, string operand2, bool multiOperand2Values)
        {
            DataTypeValidator validator = new DataTypeValidator();

            string[] operand2Values = operand2.Split('^');

            switch (operand1Type)
            {
            case AttributeTypeCode.State:
            case AttributeTypeCode.Status:
            case AttributeTypeCode.Integer:
            case AttributeTypeCode.Picklist:
                return(validator.IsInteger(operand2Values));

            case AttributeTypeCode.Double:
                return(validator.IsDouble(operand2Values));

            case AttributeTypeCode.Decimal:
                return(validator.IsDecimal(operand2Values));

            case AttributeTypeCode.Lookup:
                return(validator.IsLookup(operand2Values));

            case AttributeTypeCode.DateTime:
                return(validator.IsDate(operand2Values));

            case AttributeTypeCode.String:
            case AttributeTypeCode.Memo:
                return(true);

            default:
                throw new InvalidCastException("Unrecognized Operand1 type");
            }
        }
        /// <summary>
        /// Based on the operand and operator types, generate the proper If statement.
        /// </summary>
        /// <param name="operand1"></param>
        /// <param name="operatorValue"></param>
        /// <param name="operand2"></param>
        /// <param name="operand1Type"></param>
        /// <returns></returns>
        private string GenerateIfStatement(string operand1, int operatorValue, string operand2, AttributeTypeCode operand1Type)
        {
            string operatorSymbol = "";
            string ifStatement    = "";
            string operand2JsArray;

            switch (operatorValue)
            {
            case 497060000:
                operatorSymbol = "==";
                break;

            case 497060001:
                operatorSymbol = "!=";
                break;

            case 497060002:
                operatorSymbol = "<";
                break;

            case 497060006:
                operatorSymbol = "<=";
                break;

            case 497060003:
                operatorSymbol = ">";
                break;

            case 497060004:
                operatorSymbol = ">=";
                break;

            case 497060005:     // contains
                ifStatement = $"if (Boolean(getFieldValue(\"{operand1}\")) &&getFieldValue(\"{operand1}\")!=\"\" )";
                return(ifStatement);

            case 497060007:     // doesn't contain
                ifStatement = $"if (!Boolean(getFieldValue(\"{operand1}\")))";
                return(ifStatement);

            case 497060008:     //in
                operand2JsArray = GenerateJSArray(operand2, operand1Type);
                ifStatement     = $"if ({operand2JsArray}.includes(getFieldValue(\"{operand1}\")))";
                return(ifStatement);

            case 497060009:     // not in
                operand2JsArray = GenerateJSArray(operand2, operand1Type);
                ifStatement     = $"if (!{operand2JsArray}.includes(getFieldValue(\"{operand1}\")))";
                return(ifStatement);

            default:
                throw new InvalidOperationException($"Unrecognized Operator Value: {operatorValue}");
            }

            DataTypeValidator validator = new DataTypeValidator();

            switch (operand1Type)
            {
            case AttributeTypeCode.DateTime:
                //make sure operand 2 is valid date
                if (validator.IsDate(operand2))
                {
                    string date1 = $"new Date(getFieldValue(\"{operand1}\"))";
                    string date2 = $"new Date(\"{operand2}\")";
                    ifStatement = $"if ({date1} {operatorSymbol} {date2})";
                }
                else
                {
                    throw new InvalidCastException("Operand 2 Should be a formatted as a datetime");
                }
                break;

            case AttributeTypeCode.Boolean:
                if (validator.IsBoolean(operand2))
                {
                    ifStatement = $"if (getFieldValue(\"{operand1}\") {operatorSymbol} {operand2})";
                }
                else
                {
                    throw new InvalidCastException("Operand 2 Should be a boolean (true or false)");
                }
                break;

            case AttributeTypeCode.State:
            case AttributeTypeCode.Status:
            case AttributeTypeCode.Integer:
            case AttributeTypeCode.Picklist:
                if (validator.IsInteger(operand2))
                {
                    ifStatement = $"if (getFieldValue(\"{operand1}\") {operatorSymbol} {operand2})";
                }
                else
                {
                    throw new InvalidCastException("Operand 2 Should be an integer");
                }
                break;

            case AttributeTypeCode.Double:
                if (validator.IsDouble(operand2))
                {
                    ifStatement = $"if (getFieldValue(\"{operand1}\") {operatorSymbol} {operand2})";
                }
                else
                {
                    throw new InvalidCastException("Operand 2 Should be an double");
                }
                break;

            case AttributeTypeCode.Decimal:
                if (validator.IsDecimal(operand2))
                {
                    ifStatement = $"if (getFieldValue(\"{operand1}\") {operatorSymbol} {operand2})";
                }
                else
                {
                    throw new InvalidCastException("Operand 2 Should be decimal");
                }
                break;

            case AttributeTypeCode.Lookup:
                if (validator.IsLookup(operand2))
                {
                    ifStatement = $"if (getFieldValue(\"{operand1}\") {operatorSymbol} \"{operand2}\")";
                }
                else
                {
                    throw new InvalidCastException("Operand 2 Should be a GUID");
                }
                break;

            default:     // everything else is handled as string
                ifStatement = $"if (getFieldValue(\"{operand1}\") {operatorSymbol} \"{operand2}\")";
                break;
            }

            return(ifStatement);
        }