public override UpdateAction Where(TableFilter filter)
        {
            if (this.UpdateColumns.Count == 0)
            {
                throw new Exception("no update columns");
            }

            #region update columns
            string columnStr = string.Empty;
            foreach (var col in this.UpdateColumns)
            {
                var p = new DBParam(col.Key, col.Value);
                ParamCollection.Add(p);
                columnStr += string.Format(" {0} ={1},", col.Key, p.ParamName);
            }
            columnStr = columnStr.TrimEnd(',');
            #endregion

            #region where
            string filterCondition = string.Empty, where = string.Empty;
            if (filter != null)
            {
                filterCondition = filter.Build(base.ParamCollection);
                if (!string.IsNullOrWhiteSpace(filterCondition))
                {
                    where = string.Format(" where {0} ", filterCondition);
                }
            }
            #endregion

            base.MainSql = string.Format("update {0} set {1} {2}", base.TableCode, columnStr, where);
            return(this);
        }
        public override DeleteAction Where(TableFilter filter)
        {
            string filterCondition = string.Empty, where = string.Empty;

            if (filter != null)
            {
                filterCondition = filter.Build(base.ParamCollection);
                if (!string.IsNullOrWhiteSpace(filterCondition))
                {
                    where = string.Format(" where {0} ", filterCondition);
                }
            }

            base.MainSql = string.Format("delete from {0} {1}", base.TableCode, where);
            return(this);
        }
        //public QueryAction LeftJoin(string table)
        //{
        //    this.joinTables.Add(new JoinTable(table, EJoinType.Left));
        //    return this;
        //}
        //public QueryAction RightJoin(string table)
        //{
        //    this.joinTables.Add(new JoinTable(table, EJoinType.Right));
        //    return this;
        //}
        //public QueryAction InnerJoin(string table)
        //{
        //    this.joinTables.Add(new JoinTable(table, EJoinType.Inner));
        //    return this;
        //}
        public override QueryAction Where(TableFilter filter)
        {
            if (filter != null)
            {
                filter.MainTable = base.TableCode;
            }

            string joinCondition = string.Empty, filterCondition = string.Empty, tmpField = string.Empty, where = string.Empty;

            if (string.IsNullOrWhiteSpace(this.fixField))
            {
                throw new Exception("no field");
            }

            #region tables
            joinCondition = base.TableCode;
            foreach (var table in joinTables)
            {
                var tmpJoin = string.Empty;
                foreach (var item in table.Conditions)
                {
                    tmpJoin = string.Format("{0}={1}", item.Key.IndexOf('.') == -1 ? (base.TableCode + "." + item.Key) : item.Key,
                                            item.Value.IndexOf('.') == -1 ? (table.Table + "." + item.Value) : item.Value);
                }
                joinCondition += string.Format(" {0} join {1} on {2} ", table.JoinType.ToString(), table.Table, tmpJoin);
            }
            #endregion

            #region field
            foreach (var col in this.fixField.Split(','))
            {
                if (col.IndexOf(".") == -1)
                {
                    tmpField += string.Format("{0}.{1},", base.TableCode, col);
                }
                else if (col.IndexOf(".") > -1 && col.IndexOf("*") > -1)
                {
                    tmpField += string.Format("{0},", col);
                }
                else
                {
                    var tmpArray = col.Split('.');
                    if (string.Compare(tmpArray[0], base.TableCode, true) == 0)
                    {
                        tmpField += string.Format("{0}.{1} as {1},", tmpArray[0], tmpArray[1]);
                    }
                    else
                    {
                        tmpField += string.Format("{0}.{1} as {0}{1},", tmpArray[0], tmpArray[1]);
                    }
                }
            }
            #endregion

            #region where
            if (filter != null)
            {
                filterCondition = filter.Build(base.ParamCollection);
                where           = string.Format(" {0} ", filterCondition);
            }
            else
            {
                where = " 1=1 ";
            }
            #endregion

            string sql = string.Empty;
            #region paging
            if (this.pageIndex > 0 && this.pageSize > 0)
            {
                if (string.IsNullOrWhiteSpace(this.sortField))
                {
                    this.sortField = string.Format("{0}.{1} asc", base.TableCode, this.defaultField);
                }
                var start = (this.pageIndex - 1) * this.pageSize + 1;
                var end   = this.pageSize * this.pageIndex;
                sql = base.DbContext.GetPagingFormat(new QueryModel()
                {
                    Fields    = tmpField.TrimEnd(','),
                    Tables    = joinCondition,
                    Where     = where,
                    SortField = this.sortField,
                    Start     = start,
                    End       = end
                });
                base.SecondarySql = string.Format("select count(1) from {0}  where {1}", joinCondition, where);
            }
            else
            {
                sql = string.Format("select {0} from {1} where {2} {3}", tmpField.TrimEnd(','), joinCondition, where,
                                    !string.IsNullOrWhiteSpace(this.sortField) ? ("order by " + this.sortField) : string.Empty);
            }
            #endregion
            base.MainSql = sql;
            return(this);
        }