protected override void AddInConditionToCurrentGroup <TEntity, TMember>(
            Expression <Func <TEntity, TMember> > selector,
            TMember[] values,
            LogicalOperator locigalOperator,
            string alias,
            string tableName,
            string tableSchema)
        {
            if (values == null || !values.Any())
            {
                return;
            }
            var conditions           = currentGroup.Conditions;
            var whereClauseCondition = new WhereClauseCondition();

            whereClauseCondition.Alias           = alias;
            whereClauseCondition.LocigalOperator = locigalOperator;
            whereClauseCondition.LeftTable       = string.IsNullOrWhiteSpace(tableName) ? TableNameFromType <TEntity>() : tableName;
            whereClauseCondition.LeftSchema      = string.IsNullOrWhiteSpace(tableSchema) ? "dbo" : tableSchema;
            whereClauseCondition.Left            = GetMemberColumnName(ConvertExpression(selector));
            whereClauseCondition.Operator        = "IN";
            whereClauseCondition.Right           = "(" + string.Join(", ", values.Select(v => FormatValue(v))) + ")";
            conditions.Add(whereClauseCondition);
            IsClean = false;
        }
        protected override void AddBetweenConditionToCurrentGroup <TEntity, TMember>(
            Expression <Func <TEntity, TMember> > selector,
            TMember start,
            TMember end,
            LogicalOperator locigalOperator,
            string alias,
            string tableName,
            string tableSchema)
        {
            var conditions1           = currentGroup.Conditions;
            var whereClauseCondition1 = new WhereClauseCondition();

            whereClauseCondition1.Alias           = alias;
            whereClauseCondition1.LocigalOperator = locigalOperator;
            whereClauseCondition1.LeftTable       = string.IsNullOrWhiteSpace(tableName) ? TableNameFromType <TEntity>() : tableName;
            whereClauseCondition1.LeftSchema      = string.IsNullOrWhiteSpace(tableSchema) ? "dbo" : tableSchema;
            whereClauseCondition1.Left            = GetMemberColumnName(ConvertExpression(selector));
            whereClauseCondition1.Operator        = ">=";
            whereClauseCondition1.Right           = FormatValue(start);
            conditions1.Add(whereClauseCondition1);
            var conditions2           = currentGroup.Conditions;
            var whereClauseCondition2 = new WhereClauseCondition();

            whereClauseCondition2.Alias           = alias;
            whereClauseCondition2.LocigalOperator = LogicalOperator.And;
            whereClauseCondition2.LeftTable       = string.IsNullOrWhiteSpace(tableName) ? TableNameFromType <TEntity>() : tableName;
            whereClauseCondition2.LeftSchema      = string.IsNullOrWhiteSpace(tableSchema) ? "dbo" : tableSchema;
            whereClauseCondition2.Left            = GetMemberColumnName(ConvertExpression(selector));
            whereClauseCondition2.Operator        = "<=";
            whereClauseCondition2.Right           = FormatValue(end);
            conditions2.Add(whereClauseCondition2);
            IsClean = false;
        }
        protected override IWhereClauseBuilder AddConditionToCurrentGroup <TEntity>(
            Expression <Func <TEntity, bool> > expression,
            LogicalOperator locigalOperator,
            string alias       = null,
            string tableName   = null,
            string tableSchema = null)
        {
            ThrowIfNotInitialised();
            IsClean = false;
            var conditions           = currentGroup.Conditions;
            var whereClauseCondition = new WhereClauseCondition();

            whereClauseCondition.Alias           = alias;
            whereClauseCondition.LocigalOperator = locigalOperator;
            whereClauseCondition.LeftTable       = string.IsNullOrWhiteSpace(tableName) ? TableNameFromType <TEntity>() : tableName;
            whereClauseCondition.LeftSchema      = string.IsNullOrWhiteSpace(tableSchema) ? "dbo" : tableSchema;
            whereClauseCondition.Left            = "_LambdaTree_";
            whereClauseCondition.Right           = AtkExpressionWriterSql <TEntity> .AtkWhereWriteToString(expression, AtkExpSqlType.atkWhere, "[", "]");

            conditions.Add(whereClauseCondition);
            return(this);
        }