/// <summary>
        /// 插入临时表数据
        /// </summary>
        /// <param name="values"></param>
        /// <param name="colName"></param>
        /// <param name="tableName"></param>
        public int AddTempTable(IEnumerable <object> values, string colName, string tableName = "Global_Temp_Search")
        {
            BatchOracleHelper          oracleHelper  = new BatchOracleHelper(QuerySession);
            string                     sql           = string.Format("insert into {0}({1}) values(:0)", tableName, colName);
            Dictionary <int, object[]> columnRowData = new Dictionary <int, object[]>();

            columnRowData.Add(0, values.ToArray());
            return(oracleHelper.BatchInsertOrUpdate(sql, columnRowData));
        }
        /// <summary>
        /// 执行批量删除
        /// </summary>
        /// <param name="domains">需要删除的domain</param>
        /// <param name="whereSql">where sql 子句</param>
        /// <param name="colFilter">where 列</param>
        /// <returns></returns>
        public virtual int BatchDelete(List <TDomain> domains, string whereSql, params Expression <Func <TDomain, object> >[] colFilter)
        {
            if (domains.Count == 0)
            {
                return(0);
            }
            BatchOracleHelper       oracleHelper = new BatchOracleHelper(QuerySession);
            Table                   table        = GetTable(this.DefaultColumnMapperStrategy);
            DeleteBuilder <TDomain> builder      = new DeleteBuilder <TDomain>(table, QuerySession.DatabaseInfo.SqlDialect);
            var sql           = builder.CreateSql() + "where " + whereSql;
            var columnRowData = GetData(domains, colFilter);

            return(oracleHelper.BatchInsertOrUpdate(sql, columnRowData));
        }
        /// <summary>
        /// 批量更新,sequence Id 不需要处理,domain上加attribute
        /// domian中可空类型string与datetime默认更新为""与当前日期 ,其他可空类型必须传入有效值
        /// </summary>
        /// <param name="domains">domain 列表</param>
        /// <param name="cols">需要插入的列</param>
        public virtual int BatchInsert(List <TDomain> domains, params Expression <Func <TDomain, object> >[] cols)
        {
            if (domains.Count == 0)
            {
                return(0);
            }
            BatchOracleHelper oracleHelper = new BatchOracleHelper(QuerySession);

            var columnRowData = GetData(domains, cols);

            string[] usedProperies = cols.Select(expression => expression.PropertyName()).ToArray();
            Table    table         = GetTable(this.DefaultColumnMapperStrategy);
            InsertBuilder <TDomain> insertBuilder = new InsertBuilder <TDomain>(table, domains[0], QuerySession.DatabaseInfo.SqlDialect, usedProperies);
            string sql = insertBuilder.CreateSql();

            return(oracleHelper.BatchInsertOrUpdate(sql, columnRowData));
        }
        /// <summary>
        ///批量更新 domian中可空类型string与datetime默认更新为""与当前日期 ,其他可空类型必须传入有效值
        /// </summary>
        /// <param name="domains">待更新domains</param>
        /// <param name="where">where sql 字句,如:ID=:5 ,数字为cols 参数 从0开始的index值</param>
        /// <param name="cols">需要更新列与where字句值,where字句在最后</param>
        /// <remarks></remarks>
        public virtual int BatchUpdate(List <TDomain> domains, string where, params Expression <Func <TDomain, object> >[] cols)
        {
            if (domains.Count == 0)
            {
                return(0);
            }
            Expression <Func <TDomain, object> >[] setCols = new Expression <Func <TDomain, object> > [20];
            if (!string.IsNullOrEmpty(where))
            {
                var whereCount = Regex.Matches(where, @":\d+");
                var count      = int.Parse(whereCount[whereCount.Count - 1].Value.TrimStart(':')) + 1;
                if (count != cols.Count())
                {
                    throw new ArgumentException("cols 参数长度与 sql中需要绑定的值不一致");
                }
                Ensure.That(whereCount.Count != 0).IsTrue();

                if (cols.Count() < whereCount.Count)
                {
                    throw new ArgumentException("where 字句中的   :数字  参数个数不正确");
                }
                var t = int.Parse(whereCount[0].Value.TrimStart(':'));
                setCols = cols.Take(t).ToArray();
            }
            else
            {
                setCols = cols;
            }

            BatchOracleHelper oracleHelper = new BatchOracleHelper(QuerySession);
            var columnRowData = GetData(domains, cols);

            string[] usedProperies = setCols.Select(expression => expression.PropertyName()).ToArray();//性能不高
            Table    table         = GetTable(this.DefaultColumnMapperStrategy);
            UpdateBuilder <TDomain> updateBuilder = new UpdateBuilder <TDomain>(table, QuerySession.DatabaseInfo.SqlDialect, domains[0], usedProperies);
            // private string updateTemplate = "UPDATE {0} SET {1} WHERE {2} ";
            var sql = updateBuilder.CreateSql() + where;

            if (string.IsNullOrEmpty(where))
            {
                sql = sql.Substring(0, sql.Length - 7);
            }

            return(oracleHelper.BatchInsertOrUpdate(sql, columnRowData));
        }
        /// <summary>
        /// 批量查询。where不允许空
        /// </summary>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="domains"></param>
        /// <param name="where">where 子句 绑定索引从0 开始</param>
        /// <param name="rowMapper"></param>
        /// <param name="cols"></param>
        /// <returns></returns>
        public virtual List <TResult> Query <TResult>(List <TDomain> domains, string where, Mapper.IRowMapper <TResult> rowMapper, params Expression <Func <TDomain, object> >[] cols)
        {
            if (domains.Count == 0)
            {
                return(null);
            }
            Expression <Func <TDomain, object> >[] selectCols = new Expression <Func <TDomain, object> > [20];
            Expression <Func <TDomain, object> >[] whereCols  = new Expression <Func <TDomain, object> > [20];
            if (!string.IsNullOrEmpty(where))
            {
                var whereCount = Regex.Matches(where, @":\d+");
                Ensure.That(whereCount.Count != 0).IsTrue();
                var t = int.Parse(whereCount[whereCount.Count - 1].Value.TrimStart(':')) + 1;
                int s = cols.Length - t;
                selectCols = cols.Take(s).ToArray();
                whereCols  = cols.Skip(s).ToArray();
            }
            else
            {
                //苗建龙 添加System.前缀
                throw new System.Exception("where 条件不允许为空");
            }

            BatchOracleHelper oracleHelper = new BatchOracleHelper(QuerySession);
            var columnRowData = GetData(domains, whereCols);

            string[] usedProperies = selectCols.Select(expression => expression.PropertyName()).ToArray();//性能不高
            Table    table         = GetTable(this.DefaultColumnMapperStrategy);
            SelectBuilder <TDomain> selectBuilder = new SelectBuilder <TDomain>(table, QuerySession.DatabaseInfo.SqlDialect, usedProperies);
            // private string updateTemplate = "UPDATE {0} SET {1} WHERE {2} ";
            var sql = selectBuilder.CreateSql() + where;

            if (string.IsNullOrEmpty(where))
            {
                sql = sql.Substring(0, sql.Length - 7);
            }

            return(oracleHelper.Query(sql, columnRowData, rowMapper));
            // throw new NotImplementedException();
        }