예제 #1
0
        public override void AdjustTranslater(ExpressionTranslater translater)
        {
            var exp = translater.Expression;

            if (exp.IsPagable)
            {
                AdjustPagable(translater);
            }
        }
예제 #2
0
        protected override void AdjustPagable(ExpressionTranslater translater)
        {
            var oldSQL = translater.CommandText;
            var exp    = translater.Expression;
            var sql    = @"SELECT * FROM ({OLDSQL}) AS tmptableinner WHERE rowId between {N} and {M}";

            sql = sql.Replace("{N}", (exp.StartIndex.Value + 1).ToString());
            sql = sql.Replace("{M}", (exp.EndIndex.Value + 1).ToString());
            sql = sql.Replace("{OLDSQL}", oldSQL);
            translater.SetCommandText(sql);
        }
예제 #3
0
        /// <summary>
        /// 获取Sq语句中 "select" 和 字段之间 的部分
        /// 这里针对分页做了处理。如果不是分页检索,那么调用父类的默认实现
        /// </summary>
        /// <returns></returns>
        public override string GetSQLSelectTopClip(ExpressionTranslater translater)
        {
            StringBuilder str = new StringBuilder();
            var           exp = translater.Expression;

            if (exp.IsPagable)
            {
                IList <OrderByExpression> orderby = exp.IsOrderBy ? exp.OrderByList : new List <OrderByExpression>()
                {
                    new OrderByExpression(exp.From.GetIdentityField(), OrderByDirection.Asc)
                };
                str.Append(string.Concat("row_number() over (", translater.TranslateOrderyByList(orderby), ") as rowId,"));
            }
            else
            {
                return(base.GetSQLSelectTopClip(translater));
            }
            return(str.ToString());
        }